【发布时间】:2017-06-22 21:40:19
【问题描述】:
我正在尝试创建一个新列,以指示上一个组中是否存在 ID。这是我的数据:
data <- data.table(ID = c(1:3, c(9,2,3,4),c(5,1)),
groups = c(rep(c("a", "b", "c"), c(3, 4,2))))
ID groups
1: 1 a
2: 2 a
3: 3 a
4: 9 b
5: 2 b
6: 3 b
7: 4 b
8: 5 c
9: 1 c
我不确定如何指定滞后组。我尝试使用shift,但它不起作用:
data[,.(ID=ID,match_lagged=ID %in% shift(ID)),by=groups]
这是我想要的结果。
前 3 行不匹配,因为没有前一组。 FALSE 也适用于这三行。 ID=4(在 b 组中)在 a 组中不匹配。 ID=5(在 c 组中)在 b 组中不匹配。
请注意,c 组中的 ID 1 在 b 组中不匹配,因此即使它存在于 a 组中,它也应该为 false。这就是duplicated(data$ID) 不起作用的原因。组中的数据必须与上一个组中的数据相匹配。
groups ID match_lagged
1: a 1 NA
2: a 2 NA
3: a 3 NA
4: b 9 FALSE
5: b 2 TRUE
6: b 3 TRUE
7: b 4 FALSE
8: c 5 FALSE
9: c 1 FALSE
dplyr 解决方案也可以。
【问题讨论】:
-
duplicated(data$ID)不起作用? -
@d.b 不,一组中的数据应该与上一个组中的数据相匹配。我编辑了这个问题,以更清楚地说明为什么
duplicated不起作用。
标签: r data.table dplyr match matching