r-数据表与计算的非等联接
我可以尝试不可能的事情,但如果有任何关于如何解决以下问题的想法,我将不胜感激 我有两个数据集,第一个数据集大小为400000行,第二个数据集大小为150000行。我试图加入他们,同时检查几个条件。这是最重要的部分:我不想加入然后过滤,因为组合的数量会破坏RAM。因此,如果多个条件都为真,则只有join。重现问题的简单示例如下:r-数据表与计算的非等联接,r,data.table,R,Data.table,我可以尝试不可能的事情,但如果有任何关于如何解决以下问题的想法,我将不胜感激 我有两个数据集,第一个数据集大小为400000行,第二个数据集大小为150000行。我试图加入他们,同时检查几个条件。这是最重要的部分:我不想加入然后过滤,因为组合的数量会破坏RAM。因此,如果多个条件都为真,则只有join。重现问题的简单示例如下: library(data.table) # arbitrary data frames dt1 <- data.frame( a = 1:4, cond_
library(data.table)
# arbitrary data frames
dt1 <- data.frame(
a = 1:4,
cond_a1 = c(10,20,10,20),
cond_b1 = c("m","n","m","n"),
cond_c1 = c(12,13,14,5),
b = letters[1:4]
)
dt2 <- data.frame(
d = 1:4,
cond_a2 = c(30,20,50,10),
cond_b2 = c("n","t","m","t"),
cond_c2 = c(22,113,200,15),
r = letters[5:8]
)
# make data tables
setDT(dt1)
setDT(dt2)
# join doesn't work because of anti join and other operations not being available in data.table
dt1[dt2,
on = .(a = d,
cond_a1 > cond_a2,
cond_b1 != cond_b2, # these 2 should not be equal
cond_c2 - cond_c1 > 0 # difference should be greater than 0
), nomatch=0]
# desired result
a cond_a1 cond_b1 cond_c1 b cond_b2 cond_c2 r
1 4 10 n 5 d t 15 h
库(data.table)
#任意数据帧
dt1@IceCreamToucan第二行:20不大于20,因此不,第二行不符合条件现在应该更好,感谢使用dt1[,c(“a1”,“c1”):=(cond_a1,cond_c1)]仍然太慢;dt2[,c(“a2”,“c2”):=(cond_a2,cond_c2)];dt1[dt2,on=(a=d,a1>a2,c1这是迄今为止最快的,也是最接近我所寻找的解决方案。我希望!=
很快就能实现