data.table:通过引用聚合,连接和分配

时间:2017-11-07 05:42:34

标签: r data.table split-apply-combine

让我们调用dta我要分配给的表,然后dts我要加入的数据源并聚合到dta。

dta[dts, z_sum := sum(i.z), by=i, on='i']

我认为我应该能够加入'i'并在一个声明中聚合:

Error in `[.data.table`(dta, dts, `:=`(z_sum, sum(i.z)), by = i, on = "i") : 
  object 'i.z' not found

Enter a frame number, or 0 to exit   

1: dta[dts, `:=`(z_sum, sum(i.z)), by = i, on = "i"]
2: `[.data.table`(dta, dts, `:=`(z_sum, sum(i.z)), by = i, on = "i")

但唉,这不起作用

by=i

by=.EACHI替换为z会得到错误的结果(dtsi的最后一个值by变量的每个值

dts$z完全忽略所有值dta,并为dta[dts[, .(z=sum(z)), keyby=i], z := i.z, on='i'] 中的所有行分配相同的值。

现在,我可以这样做:

<div class="form-group col-lg-3">
    <div *ngFor="let option of options">
        <select>
            <input type="checkbox" name="options" value="{{option.value}}" [(ngModel)]="option.checked" /> {{option.name}}
        </select>
    </div>
</div>

但似乎应该有一些方法可以与data.table内部进行交互,以便在一个有效的语句中实现这一点,而不是单独的聚合,然后在此处加入。

我错过了什么,或者这是最好的办法吗?我正在进行非常大的连接(将数千万行的表合并到数千次),因此能够充分利用所有效率非常重要。

1 个答案:

答案 0 :(得分:2)

我们可以使用gcc -Wall -Wextra -g

.EACHI

数据

dta[, z_sum := dts[.SD, on = .(i), sum(z), by = .EACHI]$V1]