J.S*_*ree 4 r rowsum dplyr across
我正在尝试学习如何使用across()R 中的函数,并且我想用rowSums()它做一个简单的事情。但是,我不断收到此错误:
\n\n错误:
\nmutate()输入有问题..2。x 'x' 必须是数字 \xe2\x84\xb9\n输入..2为rowSums(., na.rm = TRUE)。
然而,我所有相关的列都是数字。任何帮助任何解释我为什么会收到此错误的信息将不胜感激!
\n这是一个可重现的示例:
\nlibrary(dplyr)\ntest <- tibble(resource_name = c("Justin", "Corey", "Justin"),\n project = c("P1", "P2", "P3"),\n sep_2021 = c(1, 2, NA),\n oct_2021 = c(5, 2, 1))\n\n\ntest %>%\n select(resource_name, project, sep_2021, oct_2021) %>%\n mutate(total = across(contains("_20")), rowSums(., na.rm = TRUE))\nRun Code Online (Sandbox Code Playgroud)\n这就是我要去的原因
\nanswer <- tibble(resource_name = c("Justin", "Corey", "Justin"),\n project = c("P1", "P2", "P3"),\n sep_2021 = c(1, 2, NA),\n oct_2021 = c(5, 2, 1),\n total = c(6, 4, 1))\nRun Code Online (Sandbox Code Playgroud)\n注意:我的真实数据集有很多列,并且顺序是可变的。因此,我真的想使用contains("_20")我的代码部分而不是索引。
我们可以使用adorn_totals
library(dplyr)
library(janitor)
test %>%
adorn_totals("col", name = "total")
Run Code Online (Sandbox Code Playgroud)
-输出
resource_name project sep_2021 oct_2021 total
Justin P1 1 5 6
Corey P2 2 2 4
Justin P3 NA 1 1
Run Code Online (Sandbox Code Playgroud)
对于rowSumsand across,语法将是
test %>%
mutate(total = rowSums(across(contains("_20")), na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)
-输出
# 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
Run Code Online (Sandbox Code Playgroud)
在OP的代码中,across选择列,但是 是rowSums对整个数据(.)而不是所选的数据进行的