R 如何在data.table中按多个列分组?
我试图在data.table中进行一些聚合,但我面临一个无法找到解决方案的挑战。挑战其实很简单,我想从多个维度总结一下data.table中的一些值 让以下代码正常工作没有问题:R 如何在data.table中按多个列分组?,r,data.table,aggregation,dimension,R,Data.table,Aggregation,Dimension,我试图在data.table中进行一些聚合,但我面临一个无法找到解决方案的挑战。挑战其实很简单,我想从多个维度总结一下data.table中的一些值 让以下代码正常工作没有问题: Export4R[,sum(units),by=Type] 这提供了以下方面的信息: Type Value foobar 45 barfoo 25 但现在我想把它再细分一点,希望得到这样一张桌子: Type Month Value foobar Mar 12 foobar Apr
Export4R[,sum(units),by=Type]
这提供了以下方面的信息:
Type Value
foobar 45
barfoo 25
但现在我想把它再细分一点,希望得到这样一张桌子:
Type Month Value
foobar Mar 12
foobar Apr 7
....
我试图用一行代码来实现这一点,如,但不幸的是,这似乎不起作用:
Export4R[,sum(units),by=Type,Month]
这很可能是一个非常简单的问题,但我很难找到答案
谢谢你的帮助
Export4R[,sum(units),by="Type,Month"]
或
后一种语法允许使用列名和命名的表达式;e、 g
Export4R[,sum(units),by=list(Grp1=substring(Type,1,2), Grp2=Month)]
顺便说一句,您可以在多行上格式化长查询:
Export4R[,list(
s = sum(units)
,m = mean(units)
),by=list(
Grp1=substring(Type,1,2)
,Grp2=Month
)]
将逗号放在开头这样做的原因是,您可以轻松地添加和注释列,而不会弄乱最后一项的结束括号;e、 g,
Export4R[,list(
s = sum(units)
# ,m = mean(units)
),by=list(
Grp1=substring(Type,1,2)
# ,Grp2=Month
)]
这个想法来自SQL。@Matthew Dowle感谢您的编辑,您是对的。通常这样做,但出于某种原因忘记了。@MatthewDowle当索引(键)未包含
by
表达式时,性能如何?我正在考虑使用它在一个包含5+m行和数千个不同组值的表中按列表列表达式分组。@最好尝试一下,并为数据集计时。尽可能保持整数类型。在标记中有一个基准点,在某个地方,时间不被关注与被关注,以及它产生不同的点。
Export4R[,list(
s = sum(units)
# ,m = mean(units)
),by=list(
Grp1=substring(Type,1,2)
# ,Grp2=Month
)]