gpt4 book ai didi

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

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

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

我尝试在 Google 和 SE 上找到一些有用的东西,但我似乎无法以一种让我得到我正在寻找的答案的方式来表述问题。

我可以为此编写一个 for 循环,比较每个 id 和每行的每个唯一值,但我努力实现更高级别的 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]

在我的示例中,ID 2、3 和 5 应该是结果,决策规则是:“根据 id,检查 a 的每个唯一值是否至少有一个观察值 b 的值等于 a 的值。”

但是,我的代码只输出 ID 2 和 5,而不输出 3。这是因为对于 ID 3,4 与之前观察的 4 匹配。

结果应该要么输出不满足条件的 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]

关于R:按组,检查对于一个 var 的每个唯一值,是否至少有一个观察结果,其中 var 的值等于另一个 var 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26466117/

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