R 基于两个条件分配渐进式ID
我有两个关于研究参与者ID的专栏。列R 基于两个条件分配渐进式ID,r,dplyr,R,Dplyr,我有两个关于研究参与者ID的专栏。列ID包含数字的递增顺序,因为受试者都是不同的人。第二列new\u ID包含关于哪些ID对应于同一个人的信息。不幸的是,它们不是按进步顺序排列的 ID <- c(1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6) new_ID <- c(8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 8,
ID
包含数字的递增顺序,因为受试者都是不同的人。第二列new\u ID
包含关于哪些ID对应于同一个人的信息。不幸的是,它们不是按进步顺序排列的
ID <- c(1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6)
new_ID <- c(8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 10, 10, 10, 10, 10, 10, 10)
data.frame(ID, new_ID)
# ID new_ID
#1 1 8
#2 1 8
#3 1 8
#4 1 8
#5 2 10
#6 2 10
#7 2 10
#8 2 10
#9 2 10
#10 2 10
#11 3 8
#12 3 8
#13 3 8
#14 3 8
#15 3 8
#16 4 4
#17 4 4
#18 4 4
#19 4 4
#20 4 4
#21 4 4
#22 5 5
#23 5 5
#24 5 5
#25 5 5
#26 6 10
#27 6 10
#28 6 10
#29 6 10
#30 6 10
#31 6 10
#32 6 10
您要做的是为每个新的_ID找到正确的ID,然后加入该映射
final_id_map <- df %>% group_by(new_ID) %>% summarise(ID_final=min(ID))
> final_id_map
# A tibble: 4 x 2
new_ID ID_final
<dbl> <dbl>
1 4 4
2 5 5
3 8 1
4 10 2
生成所需的输出。您要做的是为每个新的\u ID找到正确的ID,然后加入该映射
final_id_map <- df %>% group_by(new_ID) %>% summarise(ID_final=min(ID))
> final_id_map
# A tibble: 4 x 2
new_ID ID_final
<dbl> <dbl>
1 4 4
2 5 5
3 8 1
4 10 2
以产生所需的输出。这里有一个
数据表以及解决方案
编辑:应OP的请求,还添加了一个dplyr
解决方案
库(data.table)
ID 2:18 1
#> 3: 1 8 1
#> 4: 1 8 1
#> 5: 2 10 2
#> 6: 2 10 2
#> 7: 2 10 2
#> 8: 2 10 2
#> 9: 2 10 2
#> 10: 2 10 2
#> 11: 3 8 1
#> 12: 3 8 1
#> 13: 3 8 1
#> 14: 3 8 1
#> 15: 3 8 1
#> 16: 4 4 4
#> 17: 4 4 4
#> 18: 4 4 4
#> 19: 4 4 4
#> 20: 4 4 4
#> 21: 4 4 4
#> 22: 5 5 5
#> 23: 5 5 5
#> 24: 5 5 5
#> 25: 5 5 5
#> 26: 6 10 2
#> 27: 6 10 2
#> 28: 6 10 2
#> 29: 6 10 2
#> 30: 6 10 2
#> 31: 6 10 2
#> 32: 6 10 2
#>新ID\U ID\U最终
图书馆(dplyr)
df%
变异(ID_final=min(ID))
df
#>#tibble:32 x 3
#>#组:新的_ID[4]
#>新ID\U ID\U最终
#>
#> 1 1 8 1
#> 2 1 8 1
#> 3 1 8 1
#> 4 1 8 1
#> 5 2 10 2
#> 6 2 10 2
#> 7 2 10 2
#> 8 2 10 2
#> 9 2 10 2
#> 10 2 10 2
#> # ... 还有22排
由(v0.3.0)于2019-09-30创建的这里是数据。表也是解决方案
编辑:应OP的请求,还添加了一个dplyr
解决方案
库(data.table)
ID 2:18 1
#> 3: 1 8 1
#> 4: 1 8 1
#> 5: 2 10 2
#> 6: 2 10 2
#> 7: 2 10 2
#> 8: 2 10 2
#> 9: 2 10 2
#> 10: 2 10 2
#> 11: 3 8 1
#> 12: 3 8 1
#> 13: 3 8 1
#> 14: 3 8 1
#> 15: 3 8 1
#> 16: 4 4 4
#> 17: 4 4 4
#> 18: 4 4 4
#> 19: 4 4 4
#> 20: 4 4 4
#> 21: 4 4 4
#> 22: 5 5 5
#> 23: 5 5 5
#> 24: 5 5 5
#> 25: 5 5 5
#> 26: 6 10 2
#> 27: 6 10 2
#> 28: 6 10 2
#> 29: 6 10 2
#> 30: 6 10 2
#> 31: 6 10 2
#> 32: 6 10 2
#>新ID\U ID\U最终
图书馆(dplyr)
df%
变异(ID_final=min(ID))
df
#>#tibble:32 x 3
#>#组:新的_ID[4]
#>新ID\U ID\U最终
#>
#> 1 1 8 1
#> 2 1 8 1
#> 3 1 8 1
#> 4 1 8 1
#> 5 2 10 2
#> 6 2 10 2
#> 7 2 10 2
#> 8 2 10 2
#> 9 2 10 2
#> 10 2 10 2
#> # ... 还有22排
由(v0.3.0)@H1于2019-09-30创建,你说得对!语法是正确的,但复制的表是错误的。我刚刚编辑过。谢谢你接电话。@H1你说得对!语法是正确的,但复制的表是错误的。我刚刚编辑过。谢谢你的关注。这是一个很好的解决方案!您是否知道如何使用dplyr
执行类似的操作?我使用这个包来编码,我希望保持一致。此外,由于存在许多其他变量和以前的代码,在我当前的数据集中实现这段代码是不可行的。非常感谢你的帮助!当然,事情已经解决了。虽然我不是一个普通的tidyverse
用户,所以我不知道这是否是该范例中的最佳方式。这是一个很棒的解决方案!您是否知道如何使用dplyr
执行类似的操作?我使用这个包来编码,我希望保持一致。此外,由于存在许多其他变量和以前的代码,在我当前的数据集中实现这段代码是不可行的。非常感谢你的帮助!当然,事情已经解决了。虽然我不是一个普通的tidyverse
用户,所以我不知道这是否是该范例中的最佳方式。非常感谢您的回答。不幸的是,我需要从数据集的顶部开始将学生从到1到n进行排序。它们不能以不同的顺序排列,因为有一个对它们进行排序的标准(干预的开始)。如果你碰巧知道一个不同的解决方案,请告诉我,但我真的很感谢你为我抽出时间。非常感谢你的回答。不幸的是,我需要从数据集的顶部开始将学生从到1到n进行排序。它们不能以不同的顺序排列,因为有一个对它们进行排序的标准(干预的开始)。如果你碰巧知道一个不同的解决方案,请告诉我,但我真的很感谢你为我抽出时间。
df %>% join(final_id_map)