Search code examples
rdataframeapply

calculate row sum and product in data.frame


I would like to append a columns to my data.frame in R that contain row sums and products Consider following data frame

x    y     z
1    2     3
2    3     4
5    1     2

I want to get the following

x    y     z    sum    prod
1    2     3    6       6  
2    3     4    9       24 
5    1     2    8       10

I have tried

 sum = apply(ages,1,add)

but it gives me a row vector. Can some one please show me an efficient command to sum and product and append them to original data frame as shown above?


Solution

  • Try

     transform(df, sum=rowSums(df), prod=x*y*z)
     #  x y z sum prod
     #1 1 2 3   6    6
     #2 2 3 4   9   24
     #3 5 1 2   8   10
    

    Or

     transform(df, sum=rowSums(df), prod=Reduce(`*`, df))
     #   x y z sum prod
     #1 1 2 3   6    6
     #2 2 3 4   9   24
     #3 5 1 2   8   10
    

    Another option would be to use rowProds from matrixStats

     library(matrixStats)
     transform(df, sum=rowSums(df), prod=rowProds(as.matrix(df)))
    

    If you are using apply

     df[,c('sum', 'prod')] <-  t(apply(df, 1, FUN=function(x) c(sum(x), prod(x))))
     df
     #  x y z sum prod
     #1 1 2 3   6    6
     #2 2 3 4   9   24
     #3 5 1 2   8   10