﻿ Sum Two Columns in R - ITCodar

# Sum Two Columns in R

## sum two columns in R

The `sum` function will add all numbers together to produce a single number, not a vector (well, at least not a vector of length greater than 1).

It looks as though at least one of your columns is a factor. You could convert them into numeric vectors by checking this

``head(as.numeric(data\$col1))  # make sure this gives you the right output``

And if that looks right, do

``data\$col1 <- as.numeric(data\$col1)data\$col2 <- as.numeric(data\$col2)``

You might have to convert them into characters first. In which case do

``data\$col1 <- as.numeric(as.character(data\$col1))data\$col2 <- as.numeric(as.character(data\$col2))``

It's hard to tell which you should do without being able to see your data.

Once the columns are numeric, you just have to do

``data\$col3 <- data\$col1 + data\$col2``

## summing multiple columns in an R data-frame quickly

Here's an alternative approach using `tidyverse`:

``library(tidyverse)# input columns of interestcols = c("mpg", "cyl", "disp", "hp", "drat")mtcars %>%   group_by(id = row_number()) %>%  # for each row  nest(cols) %>%                   # nest selected columns  mutate(SUM = map_dbl(data, sum)) # calculate the sum of those columns# # A tibble: 32 x 3#      id data               SUM#   <int> <list>           <dbl># 1     1 <tibble [1 x 5]>  301.# 2     2 <tibble [1 x 5]>  301.# 3     3 <tibble [1 x 5]>  232.# 4     4 <tibble [1 x 5]>  398.# 5     5 <tibble [1 x 5]>  565.# 6     6 <tibble [1 x 5]>  357.# 7     7 <tibble [1 x 5]>  631.# 8     8 <tibble [1 x 5]>  241.# 9     9 <tibble [1 x 5]>  267.# 10    10 <tibble [1 x 5]>  320.# # ... with 22 more rows``

The output here is a data frame containing the row id (`id`), the data used at each row (`data`) and the calculated sum (`SUM`).

You can get a vector of the calculated `SUM` if you add `... %>% pull(SUM)`.

## How to sum multiple columns in two data frames in r

Here's a base R option :

``tmp <- cbind(df1, df2)data.frame(sapply(split.default(tmp, names(tmp)), rowSums))#  V1 V2 V3 V4 V5#1  4  8  5  5  4#2  6 10  7  7  0``

data

``df1 < -structure(list(V1 = 2:3, V2 = 4:5, V3 = c(5L, 7L)), class = "data.frame", row.names = c(NA, -2L))df2 <- structure(list(V1 = 2:3, V5 = c(4L, 0L), V2 = 4:5, V4 = c(5L, 7L)), class = "data.frame", row.names = c(NA, -2L))``

## Conditional cumulative sum from two columns

You were essentially in the right direction. Since you provide an `.init` value to `accumulate`, the resulting vector is of size `n+1`, with the first value being `.init`. You have to remove the first value to get a vector that fit to your column size.

Then, if you want NAs on the remaining values, here's a way to do it. Also, since the "starting row" is the third, `.init` has to be set to 8.

``df %>%  mutate(test =            ifelse(source == "B", accumulate(add, .init = 8, ~.x + .y)[-1], NA))# A tibble: 6 x 4  source value   add  test  <chr>  <dbl> <dbl> <dbl>1 A          5     1    NA2 A         10     1    NA3 B         NA     1    114 B         NA     2    135 B         NA     3    166 C         20     4    NA``

## join and sum columns together R

Using `plyr` and `dplyr` you can do this:

``df %>%   rowwise() %>%   mutate(f_new=sum(f, f2, na.rm = T))# A tibble: 6 x 5#   ca     f    f2    f3   f_new#  <fct> <dbl> <dbl> <dbl> <dbl>#1   a     3    NA     3     3#2   b     4     5     0     9#3   a     0     6     6     6#4   c    NA     1     3     1#5   b     3     9     0    12#6   b     4     7     8    11``

This method will retain and `NA` values

## R: data.table group and sum two columns

From your comments it seems like you are getting the desired result but in scientific notation. Try rounding to 3 decimals if you want to see it as you say:

``DT[, lapply(.SD, function(x) round(sum(x), 3)), by = c("PARK", "WTG")]``