R 按多个组聚合数据

R 按多个组聚合数据,r,aggregate,grouping,R,Aggregate,Grouping,我的问题最好用一个例子来描述: 数据: 在我闪亮的应用程序中,数据可以很容易地像这样显示,也可以是任何列数的其他变体。我知道变量和值列的索引值,但不知道它们的名称。所以我可以使用索引值,但它们正在改变。我也不能在任何列中硬编码,因为它们总是在变化 我希望这有帮助 library(data.table) y<-data.table(y) setkey(y, var1, var2, var3) y[,.(sum1 = sum(val1), sum2 = sum(val2)), by = c(

我的问题最好用一个例子来描述:

数据:

在我闪亮的应用程序中,数据可以很容易地像这样显示,也可以是任何列数的其他变体。我知道变量和值列的索引值,但不知道它们的名称。所以我可以使用索引值,但它们正在改变。我也不能在任何列中硬编码,因为它们总是在变化

我希望这有帮助

library(data.table)
y<-data.table(y)
setkey(y, var1, var2, var3)

y[,.(sum1 = sum(val1), sum2 = sum(val2)), by = c("var1", "var2", "var3") ]

var1 var2 var3  sum1 sum2
a   cc  ggg  4483 5176
a   gg  ccc  1928 1833
a   mm  ppp  1550 3930
a   nn  kkk  1340 2080
b   dd  ccc  8950  158
b   hh  bbb  4798  689
b   kk  mmm   129 9740
b   pp  ccc  8363 1531
c   gg  ggg  1662  125
c   gg  hhh  4485 3800
...
有人说
dplyr
的语法更容易读/写,但我同样喜欢这两种方法。速度通常是可比的,尽管我相信
数据。对于非常大的数据集,table
具有优势


有人说
dplyr
的语法更容易读/写,但我同样喜欢这两种方法。速度通常是可比的,尽管我相信
数据。对于非常大的数据集,table
具有优势

aggregate(cbind(val1,val2)~var1+var2+var3,data=y,sum,na.rm=TRUE)
应该可以工作。在上述示例中,您甚至可以使用
cbind(“val1”=val1,“val2”=val2)
设置列名。
aggregate(cbind(val1,val2)~var1+var2+var3,data=y,sum,na.rm=TRUE)
应该可以工作。在上面的示例中,您甚至可以使用
cbind(“val1”=val1,“val2”=val2)
设置列名。
head(y)
  var1 var2 var3 var4 var5 val1 val2 val3
1    p   pp  nnn   ll  aaa 3914 6621 8968
2    d   ii  jjj   pp  aaa 5885  955 7560
3    j   bb  ppp   aa  ccc 7979 5602 4639
4    e   mm  ooo   mm  fff 8746 8612 2212
5    g   ee  aaa   kk  lll 4795 6438 6318
6    f   mm  kkk   ii  ggg 7550   90 1173
library(data.table)
y<-data.table(y)
setkey(y, var1, var2, var3)

y[,.(sum1 = sum(val1), sum2 = sum(val2)), by = c("var1", "var2", "var3") ]

var1 var2 var3  sum1 sum2
a   cc  ggg  4483 5176
a   gg  ccc  1928 1833
a   mm  ppp  1550 3930
a   nn  kkk  1340 2080
b   dd  ccc  8950  158
b   hh  bbb  4798  689
b   kk  mmm   129 9740
b   pp  ccc  8363 1531
c   gg  ggg  1662  125
c   gg  hhh  4485 3800
...
library(dplyr)

y %>% group_by(var1, var2, var3) %>% 
  summarise(sum1 = sum(val1), sum2 =sum(val2))

 var1   var2   var3  sum1  sum2
(fctr) (fctr) (fctr) (int) (int)
    a     cc    ggg  4483  5176
    a     gg    ccc  1928  1833
    a     mm    ppp  1550  3930
    a     nn    kkk  1340  2080
    b     dd    ccc  8950   158
    b     hh    bbb  4798   689
    b     kk    mmm   129  9740
    b     pp    ccc  8363  1531
    c     gg    ggg  1662   125
    c     gg    hhh  4485  3800