有没有办法按(几乎)data.table

时间:2015-05-22 12:46:53

标签: r data.table

基本上我有一个包含大量列的数据集,它甚至可能在将来增长。

在分析数据之前,在大多数情况下,按所有列进行分组是有意义的。我知道,我可以手动输入所有内容,但我想知道是否有办法让它自动化。

例如,考虑一下发票项目列表,其中许多属性实际上只是进一步描述了产品(数据严重非规范化),例如:

InvoiceId     ProductId    Price   CustomerName   SomeOtherProductAttribute...
123           ABC          32.11   CustA          xyz
123           BBB          99.99   CustA          xyzy
444           ABC          32.11   CustB          xyz
444           CCC          12.99   CustB          ttt

我希望总结一下价格

[,sum(price),by=list(invoiceId,ProductId,CustomerName,SomeOtherProductAttribute)]

2 个答案:

答案 0 :(得分:3)

您可以使用setdiff

DT[, sum(Price), by = setdiff(names(DT), "Price")]
   InvoiceId ProductId CustomerName SomeOtherProductAttribute...    V1
1:       123       ABC        CustA                          xyz 32.11
2:       123       BBB        CustA                         xyzy 99.99
3:       444       ABC        CustB                          xyz 32.11
4:       444       CCC        CustB                          ttt 12.99

答案 1 :(得分:0)

使用plyr包中的ddply

library(plyr)
var_group<-colnames(data)[!(colnames(data) %in% "price")]
ddply(data,(var_group),summarise,price_sum=price)