首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Multiple level by aggregation data.table (R)

Multiple level by aggregation data.table (R)
EN

Stack Overflow用户
提问于 2017-07-07 18:00:32
回答 1查看 288关注 0票数 1

这可能是微不足道的,但我可能感到困惑。

我有这样的东西:

代码语言:javascript
复制
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))

我对按天和商店进行聚合很感兴趣:

代码语言:javascript
复制
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

而且,更全球化的是,只在白天:

代码语言:javascript
复制
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

在实践中,我希望最终得到一个数据集,该数据集具有每天的聚合和存储,以及一个仅包含日聚合的附加列:

代码语言:javascript
复制
    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

我希望实现将所有内容包装在一个函数中,而不是合并。任何帮助都将不胜感激。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-07 18:03:08

我们可以使用:=创建新列

代码语言:javascript
复制
dt[,.(sumx=sum(x),sumy=sum(y)),by=c("day","store")
     ][, c("sumx_daylevel", "sumy_daylevel") := .(sum(sumx), sum(sumy)), day][]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44967975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档