按列汇总条件-R中的数据帧

问题描述

df <- data.frame(var1=c('a','a','c','d','c'),var2=c('kk','kk','ll','bb','bb'),var3=c(1,1.4,2,5.1,3.2))

df
  var1 var2   var3
1    a    kk   1
2    a    kk   1.4
3    a    ll   2
4    c    bb   2
5    d    bb   5.1
6    c    bb   3.2

#I want df to look like this

df
  var1 var2   sum
1    a    kk   2.4
2    a    ll   2
3    c    bb   5.2
4    d    bb   5.1

如果var1var2中具有相同的值,则应将它们相加。例如,所有avar1)在kk中具有var2作为值。 我完全不知所措,但尝试了sapply(split(df$var1,df$var2),sum)。显然我错过了指定应该总结的内容var3)。

谢谢你的建议

解决方法

使用data.table:

df <- data.frame(var1=c('a','a','c','d','c'),var2=c('kk','kk','ll','bb','bb'),var3=c(1,1.4,2,5.1,3.2))

library(data.table)

DT <- as.data.table(df)

DT[,.(sum = sum(var3)),by = .(var1,var2)]

使用dplyr:

df <- data.frame(var1=c('a',3.2))

library(dplyr)

df %>% group_by(var1,var2) %>% summarize(sum = sum(var3))

输出:

   var1 var2 sum
1:    a   kk 2.4
2:    a   ll 2.0
3:    c   bb 5.2
4:    d   bb 5.1
,

data.table解决方案:

library(data.table)

dt <- data.table(
        var1=c('a',3.2)
      )
dt[,var2)]

编辑:@daniellga将我击败了20秒