在数据框中应用小计

时间:2014-07-29 20:39:07

标签: r

假设我有一个数据框:

Col1   Col2   Col3   Val
  a      1      a     2
  a      1      a     3
  a      1      b     5
  b      1      a     10
  b      1      a     20
  b      1      a     25

我想在所有列中聚合,然后将其附加到我的数据框,以便我有这个输出:

Col1   Col2   Col3   Val    Tot
  a      1      a     2      10
  a      1      a     3      10
  a      1      b     5      10
  b      1      a     10     55
  b      1      a     20     55
  b      1      a     25     55

我可以用tapply来完成这项工作吗?我有点坚持最有效的方式。

2 个答案:

答案 0 :(得分:4)

假设d是您的数据框:

> d$Tot <- ave(d$Val, d$Col1, FUN = sum)
> d
  Col1 Col2 Col3 Val Tot
1    a    1    a   2  10
2    a    1    a   3  10
3    a    1    b   5  10
4    b    1    a  10  55
5    b    1    a  20  55
6    b    1    a  25  55

答案 1 :(得分:4)

data.table方法

library(data.table)
setDT(df)[, Tot := sum(Val), by = Col1]

dplyr方法

library(dplyr)
df %>% 
  group_by(Col1) %>%
    mutate(Tot = sum(Val))