gpt4 book ai didi

r - 在 data.table 中的滞后组中匹配

转载 作者:行者123 更新时间:2023-12-04 11:41:04 26 4
gpt4 key购买 nike

我正在尝试创建一个新列,指示前一个组中是否存在 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 中,它也应该为假。这就是为什么 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解决方案也可以。

最佳答案

给组编号,然后检查 diff每个 ID 等于 1 .

data[, grp.id := .GRP, by = groups]
data[, match_lagged := c(FALSE, diff(grp.id) == 1), by = ID][
grp.id == 1, match_lagged := NA][]
# ID groups grp.id match_lagged
#1: 1 a 1 NA
#2: 2 a 1 NA
#3: 3 a 1 NA
#4: 9 b 2 FALSE
#5: 2 b 2 TRUE
#6: 3 b 2 TRUE
#7: 4 b 2 FALSE
#8: 5 c 3 FALSE
#9: 1 c 3 FALSE

这假设您找到每个 ID每组仅一次。如果不是这种情况,您可以独特,请执行上述操作,然后合并。

关于r - 在 data.table 中的滞后组中匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44709809/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com