r - 使用 data.table 聚合小计和总计

标签 r aggregate plyr data.table

我有一个 data.table在 R:

library(data.table)
set.seed(1)
DT = data.table(
  group=sample(letters[1:2],100,replace=TRUE), 
  year=sample(2010:2012,100,replace=TRUE),
  v=runif(100))

将这些数据按组和年份汇总到汇总表中既简单又优雅:
table <- DT[,mean(v),by='group, year']

然而,将这些数据聚合到一个汇总表中,包括小计和总计,有点困难,也不太优雅:
library(plyr)
yearTot <- DT[,list(mean(v),year='Total'),by='group']
groupTot <- DT[,list(mean(v),group='Total'),by='year']
Tot <- DT[,list(mean(v), year='Total', group='Total')]
table <- rbind.fill(table,yearTot,groupTot,Tot)
table$group[table$group==1] <- 'Total'
table$year[table$year==1] <- 'Total'

这产生:
table[order(table$group, table$year), ]

是否有一种简单的方法可以使用 data.table 指定小计和总计,例如 margins=TRUE plyr的命令?我更喜欢在我的数据集上使用 data.table 而不是 plyr,因为它是一个非常大的数据集,我已经拥有 data.table 格式。

最佳答案

在最近的开发 data.table 中,您可以使用称为“分组集”的新功能来生成小计:

library(data.table)
set.seed(1)
DT = data.table(
    group=sample(letters[1:2],100,replace=TRUE), 
    year=sample(2010:2012,100,replace=TRUE),
    v=runif(100))

cube(DT, mean(v), by=c("group","year"))
#    group year        V1
# 1:     a 2011 0.4176346
# 2:     b 2010 0.5231845
# 3:     b 2012 0.4306871
# 4:     b 2011 0.4997119
# 5:     a 2012 0.4227796
# 6:     a 2010 0.2926945
# 7:    NA 2011 0.4463616
# 8:    NA 2010 0.4278093
# 9:    NA 2012 0.4271160
#10:     a   NA 0.3901875
#11:     b   NA 0.4835788
#12:    NA   NA 0.4350153
cube(DT, mean(v), by=c("group","year"), id=TRUE)
#    grouping group year        V1
# 1:        0     a 2011 0.4176346
# 2:        0     b 2010 0.5231845
# 3:        0     b 2012 0.4306871
# 4:        0     b 2011 0.4997119
# 5:        0     a 2012 0.4227796
# 6:        0     a 2010 0.2926945
# 7:        2    NA 2011 0.4463616
# 8:        2    NA 2010 0.4278093
# 9:        2    NA 2012 0.4271160
#10:        1     a   NA 0.3901875
#11:        1     b   NA 0.4835788
#12:        3    NA   NA 0.4350153

关于r - 使用 data.table 聚合小计和总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315258/

相关文章:

r - 按组对多个分位数进行 ddply

r - 根据列名称绑定(bind)数据框(超过 10^8 列)的最有效方法

r - 从 d_ply 内部访问分组变量

r - 使用 dplyr 从多列计算分位数

python-3.x - Pandas :将一列列表聚合成一个列表

R - 名称(数据)和头(数据)中的列之间的差异的聚合结果

r - 以 5 分钟的间隔聚合列值并创建一个新的数据框

sql - Linux机器上R MySQL中的字符编码

R : Convert nested list into a one level list

r - 要在子集中显示的非数字条目的维恩图