Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r-数据表与计算的非等联接_R_Data.table - Fatal编程技术网

r-数据表与计算的非等联接

r-数据表与计算的非等联接,r,data.table,R,Data.table,我可以尝试不可能的事情,但如果有任何关于如何解决以下问题的想法,我将不胜感激 我有两个数据集,第一个数据集大小为400000行,第二个数据集大小为150000行。我试图加入他们,同时检查几个条件。这是最重要的部分:我不想加入然后过滤,因为组合的数量会破坏RAM。因此,如果多个条件都为真,则只有join。重现问题的简单示例如下: library(data.table) # arbitrary data frames dt1 <- data.frame( a = 1:4, cond_

我可以尝试不可能的事情,但如果有任何关于如何解决以下问题的想法,我将不胜感激

我有两个数据集,第一个数据集大小为400000行,第二个数据集大小为150000行。我试图加入他们,同时检查几个条件。这是最重要的部分:我不想加入然后过滤,因为组合的数量会破坏RAM。因此,如果多个条件都为真,则只有join。重现问题的简单示例如下:

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这是迄今为止最快的,也是最接近我所寻找的解决方案。我希望
!=
很快就能实现