Search code examples
rsum

Sum of columns from different data frames (different lengths) in R


I am new to R and I have to do something as: I have to get a final result of the following: final_x=df1+df2+df3 where df1, df2, and df3 are three data frames with 1 column each (but different lengths) as follows:

df1

      x1
1.    1
2.    4
3.    4
4.    6

df2

      x2
1.     1
2.     4
3.     4
4.     6
5.     6
6.     6
7.     8

df3

       x3
1.     1
2.     4
3.     4
4.     6
5.     6

As a final result, I would like my final_x to be the following:

final_x

      final
1.       3
2.      12
3.      12
4.      18
5.      12
6.      6
7.      8

So to get the sum of each element from the columns, despite their different lengths. Basically, when I try to sum them up, I get the error saying '+' only defined for equally-sized data frames.


Solution

  • Here it is shown how we could do it:

    #data:
    df1 <- tibble(x1 = c(1,4,4,6))
    df2 <- tibble(x2 = c(1,4,4,6,6,6,8))
    df3 <- tibble(x3 = c(1,4,4,6,6))
    
    # 1. construct a list
    df_list <- list(df1, df2, df3)
    
    #install.packages("qpcR")
    library(qpcR)
    
    # 2. Use `cbind.na` from gpcR package to fill the lacking length with `NA`, so all columns have the same length:
    df_result <- do.call(qpcR:::cbind.na, df_list)
    
    # 3. Use `rowSums` to sum
    df_result$final <- rowSums(df_result, na.rm = TRUE)
    
    # 4. save as dataframe
    final_x <- data.frame(final = df_result[,4])
    
    # 5. call result:
    final_x
    
      final
    1     3
    2    12
    3    12
    4    18
    5    12
    6     6
    7     8