I'm trying to learn how to use the across() function in R, and I want to do a simple rowSums() with it. However, I keep getting this error:
Error: Problem with
mutate()input..2. x 'x' must be numeric ℹ Input..2isrowSums(., na.rm = TRUE).
Yet, all my relevant columns are numeric. Any help any explanation why I'm getting this error would be greatly appreciated!
Here's a reproducible example:
library(dplyr)
test <- tibble(resource_name = c("Justin", "Corey", "Justin"),
project = c("P1", "P2", "P3"),
sep_2021 = c(1, 2, NA),
oct_2021 = c(5, 2, 1))
test %>%
select(resource_name, project, sep_2021, oct_2021) %>%
mutate(total = across(contains("_20")), rowSums(., na.rm = TRUE))
And here's why I'm going for
answer <- tibble(resource_name = c("Justin", "Corey", "Justin"),
project = c("P1", "P2", "P3"),
sep_2021 = c(1, 2, NA),
oct_2021 = c(5, 2, 1),
total = c(6, 4, 1))
Note: my real dataset has many columns, and the order is variable. Because of that, I really want to use the contains("_20") portion of my code and not the indices.
We may use adorn_totals
library(dplyr)
library(janitor)
test %>%
adorn_totals("col", name = "total")
-output
resource_name project sep_2021 oct_2021 total
Justin P1 1 5 6
Corey P2 2 2 4
Justin P3 NA 1 1
With rowSums and across, the syntax would be
test %>%
mutate(total = rowSums(across(contains("_20")), na.rm = TRUE))
-output
# A tibble: 3 x 5
resource_name project sep_2021 oct_2021 total
<chr> <chr> <dbl> <dbl> <dbl>
1 Justin P1 1 5 6
2 Corey P2 2 2 4
3 Justin P3 NA 1 1
In the OP's code, the across selects the columns, but the rowSums is done on the entire data (.) instead of the one that is selected
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With