我认为这段代码的方向是正确的,但我还没有完全做到这一点。
我尝试在 Google 和 SE 上找到一些有用的东西,但我似乎无法以某种方式提出问题,从而得到我正在寻找的答案。
I could写一个for-loop为此,比较每个id对于每个独特的价值a每行,但我努力实现更高水平的 R 理解,因此希望避免循环。
id <- c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5)
a <- c(1,1,1,2,2,2,3,3,4,4,4,5,5,5,6)
b <- c(1,2,3,3,3,4,3,4,5,4,4,5,6,7,8)
require(data.table)
dt <- data.table(id, a, b)
dt
dt[,unique(a) %in% b, by=id]
tmp <- dt[,unique(a) %in% b, by=id]
tmp$id[tmp$V1 == FALSE]
在我的例子中,IDs结果应为 2、3 和 5,决策规则为:“通过id,检查是否对于每个唯一值a如果至少有一个观察值b等于值a."
但是,我的代码只输出IDs2 和 5,但不是 3。这是因为ID 3, the 4与4之前的观察结果。
结果应该输出不满足条件的 ID,或者向原始表添加一个虚拟变量来指示该 ID 是否满足条件。