gpt4 book ai didi

r - 为什么我的 R 突变与 rowSums 不起作用(错误 : Problem with `mutate()` input `..2` . x 'x' 必须是数字 ℹ 输入 `..2` 是 `rowSums(.)` 。)?

转载 作者:行者123 更新时间:2023-12-04 12:30:42 35 4
gpt4 key购买 nike

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

Error: Problem with mutate() input ..2. x 'x' must be numeric ℹInput ..2 is rowSums(., na.rm = TRUE).

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

这是一个可重现的例子:

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))

这就是我要去的原因

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))

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

最佳答案

我们可能会使用 adorn_totals

library(dplyr)
library(janitor)
test %>%
adorn_totals("col", name = "total")

-输出

  resource_name project sep_2021 oct_2021 total
Justin P1 1 5 6
Corey P2 2 2 4
Justin P3 NA 1 1

使用 rowSumsacross,语法为

test %>% 
mutate(total = rowSums(across(contains("_20")), na.rm = TRUE))

-输出

# 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

在 OP 的代码中,across 选择列,但 rowSums 是针对整个数据(.)而不是一个被选中的

关于r - 为什么我的 R 突变与 rowSums 不起作用(错误 : Problem with `mutate()` input `..2` . x 'x' 必须是数字 ℹ 输入 `..2` 是 `rowSums(.)` 。)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69238467/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com