R:按组检查,对于一个 var 的每个唯一值,是否至少存在一个观察值,其中该 var 的值等于另一个 var 的值

2024-02-16

我认为这段代码的方向是正确的,但我还没有完全做到这一点。

我尝试在 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 44之前的观察结果。

结果应该输出不满足条件的 ID,或者向原始表添加一个虚拟变量来指示该 ID 是否满足条件。


怎么样

dt[, all(sapply(unique(a), function(i) any(a == i & b == i))), by = id]

#   id    V1
#1:  1  TRUE
#2:  2 FALSE
#3:  3 FALSE
#4:  4  TRUE
#5:  5 FALSE

如果要在原表中添加虚拟变量,可以这样修改

dt[, check:=all(sapply(unique(a), function(i) any(a == i & b == i))), by = id]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:按组检查,对于一个 var 的每个唯一值,是否至少存在一个观察值,其中该 var 的值等于另一个 var 的值 的相关文章

随机推荐