非equi加入,然后按组汇总

Ani*_*jee 5 r data.table

这是一个MWE.

dta <- data.table(id=rep(1:2, each=5), seq=rep(1:5, 2), val=1:10)
dtb <- data.table(id=c(1, 1, 2, 2), fil=c(2, 3, 3, 4))
dtc <- data.table(id=c(1, 1, 2, 2), mval=rep(0, 4))
for (ind in 1:4) dtc$mval[ind] <- mean( dta$val [dta$id == dtb$id[ind] & dta$seq < dtb$fil[ind]] )

dtc
#    id      mval
# 1:  1       1.0
# 2:  1       1.5
# 3:  2       6.5
# 4:  2       7.0
Run Code Online (Sandbox Code Playgroud)

dtc应与dtb具有相同的行数.对于inddtc中的每个(行),

  1. dtc$id[ind]= dtb$id[ind].
  2. dtc$mval[ind]= mean(dta$val[x]),其中x是dta$id == dtb$id[ind] & dta$seq < dtb$fil[ind].

我的data.tables非常大.因此,我正在寻找一种方法来实现上述内存占用最少.我在想一个非equi连接然后进行总结,但我似乎无法让它工作.因此,问题的标题.

非常感谢任何帮助,谢谢!

akr*_*run 5

可能这有帮助

dtc[, mval := dta[dtb, mean(val) ,on =.(id, seq < fil), by = .EACHI]$V1]
dtc
#   id mval
#1:  1  1.0
#2:  1  1.5
#3:  2  6.5
#4:  2  7.0
Run Code Online (Sandbox Code Playgroud)