提问者:小点点

识别重复并使用公共id[重复]制作列


我有一个df

df <- data.frame(ID = c('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'),
                 var1 = c(1, 1, 3, 4, 5, 5, 7, 8),
                 var2 = c(1, 1, 0, 0, 1, 1, 0, 0),
                 var3 = c(50, 50, 30, 47, 33, 33, 70, 46))

其中var1-var3列是建模软件的数值输入。为了节省计算时间,我想在建模软件中模拟var1-var3的唯一实例,然后使用leftjoin将结果连接回主数据帧。

我需要为每一行添加第二个标识符,以表明它在var1-var3方面与另一行相同。输出如下:

  ID var1 var2 var3 ID2
1  a    1    1   50 ab
2  b    1    1   50 ab
3  c    3    0   30 c
4  d    4    0   47 d
5  e    5    1   33 ef
6  f    5    1   33 ef
7  g    7    0   70 g
8  h    8    0   46 h

我可以在软件中模拟var1-var3和ID2的唯一行的子集,并使用新的ID2将结果连接回主df。


共1个答案

匿名用户

使用粘贴

library(dplyr) #1.1.0
df %>%
  mutate(ID2 = paste(unique(ID), collapse = ""), 
         .by = c(var1, var2))

#   ID var1 var2 var3 ID2
# 1  a    1    1   50  ab
# 2  b    1    1   50  ab
# 3  c    3    0   30   c
# 4  d    4    0   47   d
# 5  e    5    1   33  ef
# 6  f    5    1   33  ef
# 7  g    7    0   70   g
# 8  h    8    0   46   h

请注意,. by参数是dplyr 1.1.0的新特性。您仍然可以使用group_byungroup与早期版本和/或如果您有更复杂的管道。