R 基于两个条件分配渐进式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的专栏。列
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)