Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在data.table中按多个列分组?_R_Data.table_Aggregation_Dimension - Fatal编程技术网

R 如何在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

我试图在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]
这很可能是一个非常简单的问题,但我很难找到答案

谢谢你的帮助

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
)]