Rachel97
Rachel97

Reputation: 3

Getting the total of all rows but excluding certain columns Rstudio

I need to get the total of each row within my table however I want to exclude certain columns as these contain numeric data such as plot numbers or treatments that I don't want to be counted.

I have tried using mutate and rowsums for this but it doesn't seem to work and I get this error:

Error in UseMethod("mutate") : no applicable method for 'mutate' applied to an object of class "c('double', 'numeric')"


    mutate(total=rowSums(select(Flower,-Survey, -Date, -Recorder, -Site, -Block, -Plot, -Treatment)))

Following a comment here is my updated code:


    df<-  mutate(total = rowSums(select(Flower, !c(Ranunculus.repens, Ranunculus.acris, Ranunculus.ficaria, Trifolium.repens, Geranium.molle, Cardamine.flexuosa, Bellis.perennis, Taraxacum.officinalis, Lamium.purpureum, Glechoma.hederacea, Cardamine.pratensis, Medicago.lupulina, Medicago.arabica, Cerastium.fontanum, Prunella.vulgaris, Sonchus.arvensis, Veronica.persica, Veronica.chamaedrys, Viola.riviniana)), na.rm = TRUE))

I am now getting an error message saying that X must be numeric however after checking all of the columns entered are numeric.

Upvotes: 0

Views: 67

Answers (1)

stefan
stefan

Reputation: 124148

The issue is that the first argument of mutate has to be a dataframe while you try to apply mutate on total which is a numeric. To make your code work you have to do:

library(dplyr)

mutate(Flower, total=rowSums(select(Flower,-Survey, -Date, -Recorder, -Site, -Block, -Plot, -Treatment)))

Using mtcars as example data:

library(dplyr)

mtcars |> 
  mutate(total = rowSums(select(mtcars, !c(hp, mpg, disp, drat, wt, qsec))))
#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb total
#> Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4    15
#> Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4    15
#> Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1    11
#> Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1    11   

Another option would be to use dplyr::across like so:


mtcars |> 
  mutate(total = rowSums(across(!c(hp, mpg, disp, drat, wt, qsec))))
#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb total
#> Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4    15
#> Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4    15
#> Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1    11
#> Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1    11

Upvotes: 1

Related Questions