2017-07-07 133 views
1

多級可能這可能是微不足道的,但我可能會感到困惑。聚合data.table(R)

我有這樣的事情:

set.seed(1234) 

dt<-data.table(day=sample(c("day1","day2","day3"),20,replace = T), 
store=sample(c("store1","store2","store3"),20,replace=T), 
x=rnorm(20,33,6),y=rnorm(20,12,10)) 

我感興趣的白天和存儲彙總:

dt[,.(sumx=sum(x),sumy=sum(y)),by=c("day","store")] 

    day store  sumx  sumy 
1: day1 store2 56.33890 44.52312 
2: day2 store1 164.72854 61.37866 
3: day3 store3 144.52483 53.74347 
4: day1 store3 56.25504 34.00066 
5: day3 store1 70.61311 30.85589 
6: day2 store3 123.34534 74.67024 
7: day2 store2 35.72952 21.19009 

但同時,更在全球範圍,僅一天:

dt[,.(sumx=sum(x),sumy=sum(y)),by=day] 

    day  sumx  sumy 
1: day1 112.5939 78.52378 
2: day2 323.8034 157.23899 
3: day3 215.1379 84.59936 

實際上,我想最終得到一個數據集,每天都有數據集並存儲,而另一個數據集n只有一天聚合:

day store  sumx  sumy sumx_daylevel sumy_daylevel 
1: day1 store2 56.33890 44.52312 112.5939 78.52378 
2: day2 store1 164.72854 61.37866 323.8034 157.23899 
3: day3 store3 144.52483 53.74347 215.1379 84.59936 
4: day1 store3 56.25504 34.00066 112.5939 78.52378 
5: day3 store1 70.61311 30.85589 215.1379 84.59936 
6: day2 store3 123.34534 74.67024 323.8034 157.23899 
7: day2 store2 35.72952 21.19009 323.8034 157.23899 

我想實現包裝一切功能,沒有合併。 任何幫助將不勝感激。謝謝

回答

2

我們可以使用:=來創建新列

dt[,.(sumx=sum(x),sumy=sum(y)),by=c("day","store") 
    ][, c("sumx_daylevel", "sumy_daylevel") := .(sum(sumx), sum(sumy)), day][]