使用I字符串来引用dplyr中的变量吗?

Ign*_*cio 2 r dplyr nse

假设我有以下数据:

test_df <- data.frame(a=rnorm(100), b=rnorm(100))
Run Code Online (Sandbox Code Playgroud)

以下作品:

test_df %>% 
  summarise(y = mean(a))
Run Code Online (Sandbox Code Playgroud)

现在假设不是a我想传递一个字符串

string_outcome <- "a" # I want to use this

test_df %>% 
  summarise(y = mean(string_outcome))
Run Code Online (Sandbox Code Playgroud)

那行不通。我尝试使用,!!string_outcome但这也不起作用。我怎样才能解决这个问题?

akr*_*run 7

由于它是字符串,因此将其转换为符号(symfrom rlang)并求值(!!

test_df %>%
     summarise(y = mean(!! rlang::sym(string_outcome)))
Run Code Online (Sandbox Code Playgroud)

或者使用summarise_at可以在vars参数中使用字符串的

test_df %>%
    summarise_at(vars(string_outcome), list(y = ~  mean(.)))
Run Code Online (Sandbox Code Playgroud)

或者,如果我们需要不带任何属性的单个值,甚至pullmean可以使用

test_df %>% 
       pull(string_outcome) %>%
       mean
Run Code Online (Sandbox Code Playgroud)