R 是否有一种方法可以按data.table中的(几乎)所有列自动分组

R 是否有一种方法可以按data.table中的(几乎)所有列自动分组,r,data.table,R,Data.table,基本上,我有一个拥有大量列的数据集,它甚至可能在未来增长 现在在我分析数据之前,在大多数情况下,按所有列进行分组是有意义的。我知道,我可以手动键入所有内容,但我想知道是否有办法使其自动 例如,考虑发票项目列表,其中许多属性实际上只是进一步描述产品(数据严重非规范化),例如: 我想总结一下价格 [,sum(price),by=list(invoiceId,ProductId,CustomerName,SomeOtherProductAttribute)] 使用plyr软件包中的ddply lib

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

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

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

我想总结一下价格

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

使用plyr软件包中的
ddply

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

变量组您可以使用
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

我认为这不能回答问题,因为您仍然“手动”键入分组列的所有名称(OP使用的是data.table)。奇怪的
DT[,sum(Price),by=!“Price”]
不起作用,因为最近更新了
j
中的此类参数。另外,使用
DT[,(Price=sum(Price)),by=setdiff(name(DT),“Price”)]
如果希望将输出列命名为
Price
而不是
V1
;未在中编辑此,因为OP未提供所需的输出。
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