【发布时间】:2021-09-02 10:47:23
【问题描述】:
我正在尝试了解如何仅将 rowSums() 应用于特定列。 这是一个代表:
df <- tibble(
"ride" = c("bicycle", "motorcycle", "car", "other"),
"A" = c(1, NA, 1, NA),
"B" = c(NA, 2, NA, 2)
)
我可以通过 index[2:3] 得到想要的结果
df %>%
mutate(total = rowSums(.[2:3], na.rm = TRUE))
# A tibble: 4 × 4
ride A B total
<chr> <dbl> <dbl> <dbl>
1 bicycle 1 NA 1
2 motorcycle NA 2 2
3 car 1 NA 1
4 other NA 2 2
但是,如果我尝试按名称指定列,则会出现奇怪的结果
df %>%
mutate(total = sum(c_across(c("A":"B")), na.rm = TRUE))
# A tibble: 4 × 4
ride A B total
<chr> <dbl> <dbl> <dbl>
1 bicycle 1 NA 6
2 motorcycle NA 2 6
3 car 1 NA 6
4 other NA 2 6
我做错了什么?
我可以通过以下方式实现我想要的:
df %>%
mutate_all(~replace(., is.na(.), 0)) %>%
mutate(total = A + B)
但我想通过传递一个向量来指定列名,这样我以后可以更改为不同的列名组合。 这样的事情是我想要实现的:
cols_to_sum <- c("A","B")
df %>%
mutate(total = sum(across(cols_to_sum), na.rm = TRUE))
【问题讨论】: