Sum the values of selected columns by rows

Hi:

I have a df containing species densities (ind/m²) per Campaign and Location. I'd like to sum all the specie's abundances into a new column.

My dataframe is something like this:

Campaign    Location      Apogon.imberbis Aetomylaeus.bovinus Antennatus.nummifer Ariosoma.balearicum
  <fct>                           <fct>                   <dbl>               <dbl>               <dbl>               <dbl>
1 Summer 2016 Porto Santo 1        0.01                   0.03                   0                         0
2 Summer 2016 Porto Santo 2        0.03                   0                   0.04                     0.001
3 Autumn 2016 Porto Santo 1         0.02                   0                      0                            0
4 Autumn 2016 Porto Santo 2         0.02                   0                   0.01                        0
5 Summer 2017 Porto Santo 1          0                      0.01                   0                     0.02
6 Summer 2017 Porto Santo 2          0                       0                   0.03                   0

Any ideas?

Thanks in advance.

Pedro

Hi @paneves,

You didn't share your data so I demonstrated how to do this using some default data. This should do it for you. You can select the columns to sum over by naming each variable inside c(), or by using tidyselect selectors.

library(tidyverse)

mtcars %>% 
  rowwise() %>% 
  mutate(
    # Can use tidyselect semantics inside c_across()
    total = sum(c_across(c(disp, hp, wt)))
  )
#> # A tibble: 32 x 12
#> # Rowwise: 
#>      mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb total
#>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1  21       6  160    110  3.9   2.62  16.5     0     1     4     4  273.
#>  2  21       6  160    110  3.9   2.88  17.0     0     1     4     4  273.
#>  3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1  203.
#>  4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1  371.
#>  5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2  538.
#>  6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1  333.
#>  7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4  609.
#>  8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2  212.
#>  9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2  239.
#> 10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4  294.
#> # … with 22 more rows

Thanks a lot! I had read about across and rowwise, but you example made it much clearer!

Cheers:
Pedro

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.