问题描述
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
如果var1
在var2
中具有相同的值,则应将它们相加。例如,所有a
(var1
)在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秒