gpt4 book ai didi

r - 两个表的非相等连接

转载 作者:行者123 更新时间:2023-12-05 02:37:02 26 4
gpt4 key购买 nike

我有 2 个数据框,我需要找出 mock$num 中的条目落在范围数据框指定的 x-y 范围内的次数。

id <- c(1:9)
num <- c(99,101,199,250,999,1500,3000,4000,5000)
mock <- data.frame(id, num)

x <- c(100,100,200,1000,4000,4000)
y <- c(198,200,300,2000,5000,5000)
range <- data.frame(x,y)

所需的输出如下所示

id num check
1 99 0
2 101 2
3 199 1
4 250 1
5 999 0
6 1500 1
7 3000 0
8 4000 2
9 5000 2

可以通过下面的代码获取

mock$check <- mapply(
function(x){
count = 0
for (i in 1:nrow(range)){
if (x >= range$x[i] & x <= range$y[i]){
count = count + 1
}
}
paste0(count)
},
mock$num
)

由于 for 循环,上述方法不适合大型数据集,我尝试使用非 equi 连接方法(通过 data.table)。但是,我对如何在两个表之间进行非相等连接感到困惑(不确定如何继续...)

nonequi <- mock[range, on =.(num >= x, num <=y),]

想寻求一些解决这个问题的指导。感谢您的帮助。

最佳答案

首先进行非等值连接,然后总结每个 id 出现的次数,然后连接回 mock 以找出哪些 ID 被遗漏了。对于这些 ID,将计数设置为零。

res <- setDT(mock)[setDT(range), .(id), on = .(num >= x, num <= y)][, .N, by = id][mock, on = .(id)][is.na(N), N := 0][]

关于r - 两个表的非相等连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70091656/

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