我工作中data.table的一个非常常见的用例是合并两个表,然后合并聚合,而不需要进一步的中间结果。
示例:
library(data.table)
set.seed(200)
a.DT <- data.table(k1=2000+sample.int(12, 50, replace = TRUE))[
, k2 := month.abb[(sample(12, .N, replace = TRUE))]][
, .(val = rnbinom(1, 50, .8))
, by = .(k1, k2)]
b.DT <- a.DT[
, .(k3 = LETTERS[7:12]), by = k1][
, adj1 := 1/rbeta(1, 2, 5)
, by= k3][
, adj2 := rbeta(.N, 5, .5)]
setkey(a.DT, k1)
setkey(b.DT, k1)
result.DT <- a.DT[b.DT, allow.cartesian = TRUE][
, .(weighted = sum(val * adj1 * adj2))
, by = .(k3, k1, k2)]
我的问题是,如果中间数据。表&#34; a.DT [b.DT,allow.cartesian = TRUE]&#34;首先是全部分配还是直接通过管道传输到以下聚合中?
此致, 亚历山大