假设我有一个数据框,并且想要计算两个随机列的总和。
我尝试过:
df <- data.frame(a=seq(1,3),b=seq(4,6),c=seq(7,9))
vars <- sample(letters[1:3],2)
df %>% rowwise() %>% mutate(s=sum({{vars}}))
但我明白:
> df %>% rowwise() %>% mutate(s=sum({{vars}}))
Error in `.fun()`:
ℹ In argument: `s = sum(c("c", "b"))`.
ℹ In row 1.
Caused by error in `sum()`:
! invalid 'type' (character) of argument
Run `rlang::last_trace()` to see where the error occurred.
因为,虽然向量被展开了,但是它里面的字符串并没有转换成符号。
什么是 tidyverse 方法来做到这一点?
你可以这样做:
df |>
rowwise() |>
mutate(
s = sum(c_across(all_of(vars)))
)
# A tibble: 3 × 4
# Rowwise:
# a b c s
# <int> <int> <int> <int>
# 1 1 4 7 8
# 2 2 5 8 10
# 3 3 6 9 12