0
df <- data.frame(var1=c('a','a','a','c','d','c'),var2=c('kk','kk','ll','bb','bb','bb'),var3=c(1,1.4,2,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

When var1 has same values in var2 they should sum up. So for example all a (var1) that has kk as value in var2 added up. I am completely clueless but tried sapply(split(df$var1,df$var2), sum). Obviously I missed specifying what should sum up (var3).

Thank you for suggestions

takeITeasy
  • 350
  • 3
  • 19

2 Answers2

2

Using data.table:

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

library(data.table)

DT <- as.data.table(df)

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

Using dplyr:

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

library(dplyr)

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

Output:

   var1 var2 sum
1:    a   kk 2.4
2:    a   ll 2.0
3:    c   bb 5.2
4:    d   bb 5.1
daniellga
  • 1,142
  • 6
  • 16
0

data.table solution:

library(data.table)

dt <- data.table(
        var1=c('a','a','a','c','d','c'),
        var2=c('kk','kk','ll','bb','bb','bb'),
        var3=c(1,1.4,2,2,5.1,3.2)
      )
dt[, .(sum = sum(var3)), by = .(var1, var2)]

Edit: @daniellga beat me to it by 20 seconds

NiklasvMoers
  • 309
  • 2
  • 13