如何在data.table中按多列分组?

时间:2012-11-25 19:56:20

标签: 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      7
....

我尝试使用一行代码执行此操作,但不幸的是,这似乎不起作用:

Export4R[,sum(units),by=Type,Month]

这很可能是一个非常简单的问题,但我在找到答案时遇到了问题。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

Export4R[,sum(units),by="Type,Month"]

Export4R[,sum(units),by=list(Type,Month)]



后一种语法允许表达列名和命名;如,

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。