【问题标题】:Non-equi join, then summarize by groupNon-equi join,然后按组汇总
【发布时间】:2016-09-18 07:54:41
【问题描述】:

这是一个 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

dtc 应该具有与 dtb 相同的行数。对于 dtc 中的每个(行)ind

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

我的 data.tables 非常大。因此,我正在寻找一种以最小内存占用实现上述目标的方法。我在想一个非 equi 连接,然后是一个总结,但我似乎无法让它发挥作用。因此,问题的标题。

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

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    这可能有帮助

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      相关资源
      最近更新 更多