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