我有一个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。
使用粘贴
:
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_by
和ungroup
与早期版本和/或如果您有更复杂的管道。