R代码用于确定个体是否先前曾在同一组中。

huangapple go评论89阅读模式
英文:

R code to identify whether individuals in groups have previously been in groups together

问题

以下是您提供的内容的翻译:

我有一个关于不同群体的个体随时间变化的数据集,有时与相同的群体成员,有时与新成员一起。

我尝试创建一个变量,显示每个群体中的个体已经在以前的群体中与任何当前群体成员一起的次数,使用日期信息来确保计数是按时间顺序排列的(即不计算来自未来群体的共享成员)。

示例数据:

  1. SampleData <- tribble(~ID, ~GROUP_NUM, ~Date,
  2. "abc", 22,"2022-01-15",
  3. "def", 22,"2022-01-15",
  4. "ghi", 22,"2022-01-15",
  5. "jkl", 22,"2022-01-15",
  6. "abc", 14,"2022-02-19",
  7. "mno", 14,"2022-02-19",
  8. "pqr", 14,"2022-02-19",
  9. "stv", 14,"2022-02-19",
  10. "abc", 18,"2022-05-11",
  11. "stv", 18,"2022-05-11",
  12. "wxy", 18,"2022-05-11",
  13. "zzz", 18,"2022-05-11",
  14. "abc", 35,"2022-10-06",
  15. "def", 35,"2022-10-06",
  16. "pqr", 35,"2022-10-06",
  17. "bbb", 35,"2022-10-06",
  18. "abc", 44,"2021-04-14",
  19. "stv", 44,"2021-04-14",
  20. "pqr", 44,"2021-04-14",
  21. "bbb", 44,"2021-04-14")

这是我想要的输出:

  1. AimedData <- tribble(~ID, ~GROUP_NUM, ~Date, ~NPrevKnown,
  2. "abc", 22,"2022-01-15", 0,
  3. "def", 22,"2022-01-15", 0,
  4. "ghi", 22,"2022-01-15", 0,
  5. "jkl", 22,"2022-01-15", 0,
  6. "abc", 14,"2022-02-19", 2,
  7. "mno", 14,"2022-02-19", 0,
  8. "pqr", 14,"2022-02-19", 2,
  9. "stv", 14,"2022-02-19", 2,
  10. "abc", 18,"2022-05-11", 2,
  11. "stv", 18,"2022-05-11", 2,
  12. "wxy", 18,"2022-05-11", 0,
  13. "zzz", 18,"2022-05-11", 0,
  14. "abc", 35,"2022-10-06", 4,
  15. "def", 35,"2022-10-06", 1,
  16. "pqr", 35,"2022-10-06", 3,
  17. "bbb", 35,"2022-10-06", 2,
  18. "abc", 44,"2021-04-14", 0,
  19. "stv", 44,"2021-04-14", 0,
  20. "pqr", 44,"2021-04-14", 0,
  21. "bbb", 44,"2021-04-14", 0)
英文:

I have a dataset of individuals who belong to different groups over time, sometimes with the same group members, sometimes with new members.

I'm trying to create a variable which displays a count of the number of times each individual in a group has been in an earlier group with any of the current group members, using the Date information to make sure the count is in chronological order (i.e. not counting shared membership from groups in the future).

Example data:

  1. SampleData <- tribble(~ID, ~GROUP_NUM, ~Date,
  2. "abc", 22,"2022-01-15",
  3. "def", 22,"2022-01-15",
  4. "ghi", 22,"2022-01-15",
  5. "jkl", 22,"2022-01-15",
  6. "abc", 14,"2022-02-19",
  7. "mno", 14,"2022-02-19",
  8. "pqr", 14,"2022-02-19",
  9. "stv", 14,"2022-02-19",
  10. "abc", 18,"2022-05-11",
  11. "stv", 18,"2022-05-11",
  12. "wxy", 18,"2022-05-11",
  13. "zzz", 18,"2022-05-11",
  14. "abc", 35,"2022-10-06",
  15. "def", 35,"2022-10-06",
  16. "pqr", 35,"2022-10-06",
  17. "bbb", 35,"2022-10-06",
  18. "abc", 44,"2021-04-14",
  19. "stv", 44,"2021-04-14",
  20. "pqr", 44,"2021-04-14",
  21. "bbb", 44,"2021-04-14")

Here's my desired output:

  1. AimedData <- tribble(~ID, ~GROUP_NUM, ~Date, ~NPrevKnown,
  2. "abc", 22,"2022-01-15", 0,
  3. "def", 22,"2022-01-15", 0,
  4. "ghi", 22,"2022-01-15", 0,
  5. "jkl", 22,"2022-01-15", 0,
  6. "abc", 14,"2022-02-19", 2,
  7. "mno", 14,"2022-02-19", 0,
  8. "pqr", 14,"2022-02-19", 2,
  9. "stv", 14,"2022-02-19", 2,
  10. "abc", 18,"2022-05-11", 2,
  11. "stv", 18,"2022-05-11", 2,
  12. "wxy", 18,"2022-05-11", 0,
  13. "zzz", 18,"2022-05-11", 0,
  14. "abc", 35,"2022-10-06", 4,
  15. "def", 35,"2022-10-06", 1,
  16. "pqr", 35,"2022-10-06", 3,
  17. "bbb", 35,"2022-10-06", 2,
  18. "abc", 44,"2021-04-14", 0,
  19. "stv", 44,"2021-04-14", 0,
  20. "pqr", 44,"2021-04-14", 0,
  21. "bbb", 44,"2021-04-14", 0)

答案1

得分: 0

以下是翻译后的代码部分:

  1. SampleData <- dplyr::tribble(~ID, ~GROUP_NUM, ~Date,
  2. "abc", 22,"2022-01-15",
  3. "def", 22,"2022-01-15",
  4. "ghi", 22,"2022-01-15",
  5. "jkl", 22,"2022-01-15",
  6. "abc", 14,"2022-02-19",
  7. "mno", 14,"2022-02-19",
  8. "pqr", 14,"2022-02-19",
  9. "stv", 14,"2022-02-19",
  10. "abc", 18,"2022-05-11",
  11. "stv", 18,"2022-05-11",
  12. "wxy", 18,"2022-05-11",
  13. "zzz", 18,"2022-05-11",
  14. "abc", 35,"2022-10-06",
  15. "def", 35,"2022-10-06",
  16. "pqr", 35,"2022-10-06",
  17. "bbb", 35,"2022-10-06",
  18. "abc", 44,"2021-04-14",
  19. "stv", 44,"2021-04-14",
  20. "pqr", 44,"2021-04-14",
  21. "bbb", 44,"2021-04-14"
  22. )
  23. SampleData$Date <- as.Date(SampleData$Date)
  24. AimedData <- SampleData
  25. AimedData$NPrevKnown <- sapply(1:nrow(SampleData),function(ROW){
  26. individual<-AimedData$ID[ROW]
  27. others <- unique(AimedData$ID[which(
  28. AimedData$GROUP_NUM==AimedData$GROUP_NUM[ROW]&
  29. AimedData$Date==AimedData$Date[ROW]&
  30. AimedData$ID!=AimedData$ID[ROW]
  31. )])
  32. if(length(others)>0){
  33. old_groups <- AimedData[which(
  34. AimedData$Date<AimedData$Date[ROW]& # added a less than here
  35. AimedData$ID==AimedData$ID[ROW]
  36. ),]
  37. old_pals<-NULL
  38. if(length(old_groups)>0){
  39. for (i in 1:nrow(old_groups)){
  40. old_pals<-append(
  41. old_pals,
  42. (AimedData$ID[which(
  43. AimedData$GROUP_NUM==old_groups$GROUP_NUM[i]&
  44. AimedData$Date==old_groups$Date[i]&
  45. AimedData$ID!=AimedData$ID[ROW])])
  46. )
  47. }
  48. }
  49. }
  50. length(which(old_pals %in% others))
  51. })
  52. AimedData$WhoPrevKnown <- sapply(1:nrow(SampleData),function(ROW){
  53. individual<-AimedData$ID[ROW]
  54. others <- unique(AimedData$ID[which(
  55. AimedData$GROUP_NUM==AimedData$GROUP_NUM[ROW]&
  56. AimedData$Date==AimedData$Date[ROW]&
  57. AimedData$ID!=AimedData$ID[ROW]
  58. )])
  59. if(length(others)>0){
  60. old_groups <- AimedData[which(
  61. AimedData$Date<AimedData$Date[ROW]& # added a less than here
  62. AimedData$ID==AimedData$ID[ROW]
  63. ),]
  64. old_pals<-NULL
  65. if(length(old_groups)>0){
  66. for (i in 1:nrow(old_groups)){
  67. old_pals<-append(
  68. old_pals,
  69. (AimedData$ID[which(
  70. AimedData$GROUP_NUM==old_groups$GROUP_NUM[i]&
  71. AimedData$Date==old_groups$Date[i]&
  72. AimedData$ID!=AimedData$ID[ROW])])
  73. )
  74. }
  75. }
  76. }
  77. paste0(old_pals,collapse = " | ")
  78. })

希望这对您有所帮助。

英文:

Not the most efficient but this might work!

  1. SampleData <- dplyr::tribble(~ID, ~GROUP_NUM, ~Date,
  2. "abc", 22,"2022-01-15",
  3. "def", 22,"2022-01-15",
  4. "ghi", 22,"2022-01-15",
  5. "jkl", 22,"2022-01-15",
  6. "abc", 14,"2022-02-19",
  7. "mno", 14,"2022-02-19",
  8. "pqr", 14,"2022-02-19",
  9. "stv", 14,"2022-02-19",
  10. "abc", 18,"2022-05-11",
  11. "stv", 18,"2022-05-11",
  12. "wxy", 18,"2022-05-11",
  13. "zzz", 18,"2022-05-11",
  14. "abc", 35,"2022-10-06",
  15. "def", 35,"2022-10-06",
  16. "pqr", 35,"2022-10-06",
  17. "bbb", 35,"2022-10-06",
  18. "abc", 44,"2021-04-14",
  19. "stv", 44,"2021-04-14",
  20. "pqr", 44,"2021-04-14",
  21. "bbb", 44,"2021-04-14"
  22. )
  23. SampleData$Date <-as.Date(SampleData$Date)
  24. AimedData <- SampleData
  25. AimedData$NPrevKnown <- sapply(1:nrow(SampleData),function(ROW){
  26. individual<-AimedData$ID[ROW]
  27. others <- unique(AimedData$ID[which(
  28. AimedData$GROUP_NUM==AimedData$GROUP_NUM[ROW]&
  29. AimedData$Date==AimedData$Date[ROW]&
  30. AimedData$ID!=AimedData$ID[ROW]
  31. )])
  32. if(length(others)>0){
  33. old_groups <- AimedData[which(
  34. AimedData$Date<AimedData$Date[ROW]& # added a less than here
  35. AimedData$ID==AimedData$ID[ROW]
  36. ),]
  37. old_pals<-NULL
  38. if(length(old_groups)>0){
  39. for (i in 1:nrow(old_groups)){
  40. old_pals<-append(
  41. old_pals,
  42. (AimedData$ID[which(
  43. AimedData$GROUP_NUM==old_groups$GROUP_NUM[i]&
  44. AimedData$Date==old_groups$Date[i]&
  45. AimedData$ID!=AimedData$ID[ROW])])
  46. )
  47. }
  48. }
  49. }
  50. length(which(old_pals %in% others))
  51. })
  52. AimedData$WhoPrevKnown <- sapply(1:nrow(SampleData),function(ROW){
  53. individual<-AimedData$ID[ROW]
  54. others <- unique(AimedData$ID[which(
  55. AimedData$GROUP_NUM==AimedData$GROUP_NUM[ROW]&
  56. AimedData$Date==AimedData$Date[ROW]&
  57. AimedData$ID!=AimedData$ID[ROW]
  58. )])
  59. if(length(others)>0){
  60. old_groups <- AimedData[which(
  61. AimedData$Date<AimedData$Date[ROW]& # added a less than here
  62. AimedData$ID==AimedData$ID[ROW]
  63. ),]
  64. old_pals<-NULL
  65. if(length(old_groups)>0){
  66. for (i in 1:nrow(old_groups)){
  67. old_pals<-append(
  68. old_pals,
  69. (AimedData$ID[which(
  70. AimedData$GROUP_NUM==old_groups$GROUP_NUM[i]&
  71. AimedData$Date==old_groups$Date[i]&
  72. AimedData$ID!=AimedData$ID[ROW])])
  73. )
  74. }
  75. }
  76. }
  77. paste0(old_pals,collapse = " | ")
  78. })

huangapple
  • 本文由 发表于 2023年3月21日 00:21:55
  • 转载请务必保留本文链接:https://go.coder-hub.com/75792827.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定