为什么我的 R 与 rowSums 一起变异不起作用(错误:“mutate()”输入“..2”出现问题。x“x”必须是数字?输入“..2”是“rowSums(.)”。) ?

J.S*_*ree 4 r rowsum dplyr across

我正在尝试学习如何使用across()R 中的函数,并且我想用rowSums()它做一个简单的事情。但是,我不断收到此错误:

\n
\n

错误:mutate()输入有问题..2。x 'x' 必须是数字 \xe2\x84\xb9\n输入..2rowSums(., na.rm = TRUE)

\n
\n

然而,我所有相关的列都是数字。任何帮助任何解释我为什么会收到此错误的信息将不胜感激!

\n

这是一个可重现的示例:

\n
library(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))\n
Run Code Online (Sandbox Code Playgroud)\n

这就是我要去的原因

\n
answer <-  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))\n
Run Code Online (Sandbox Code Playgroud)\n

注意:我的真实数据集有很多列,并且顺序是可变的。因此,我真的想使用contains("_20")我的代码部分而不是索引。

\n

akr*_*run 6

我们可以使用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对整个数据(.)而不是所选的数据进行的