让我们调用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
会得到错误的结果(dts
中i
的最后一个值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内部进行交互,以便在一个有效的语句中实现这一点,而不是单独的聚合,然后在此处加入。
我错过了什么,或者这是最好的办法吗?我正在进行非常大的连接(将数千万行的表合并到数千次),因此能够充分利用所有效率非常重要。
答案 0 :(得分:2)
我们可以使用gcc -Wall -Wextra -g
.EACHI
dta[, z_sum := dts[.SD, on = .(i), sum(z), by = .EACHI]$V1]