在管道中使用预先指定的列名称

时间:2018-06-12 15:50:21

标签: r dplyr

我想预先指定我的列名并在dplyr管道中使用它

这是一个例子。我想这样做:

iris %>% 
  group_by(Species) %>%
  summarise(Var = mean(Petal.Length[Sepal.Width > 3]))

但是在管道外部分配了列名,就像这样

col_name <- "Petal.Length"

iris %>% 
  group_by(Species) %>%
  summarise(Var = mean(!!col_name[Sepal.Width > 3]))

1 个答案:

答案 0 :(得分:1)

我们可以转换为符号(sym),然后进行评估(!!

iris %>%
 group_by(Species) %>%   
 summarise(Var = mean((!!rlang::sym(col_name))[Sepal.Width >3]))
# A tibble: 3 x 2
#  Species      Var
#  <fct>      <dbl>
#1 setosa      1.48
#2 versicolor  4.65
#3 virginica   5.72

如果我们只需要使用dplyr,那么可以在summarise_at中传递变量对象

iris %>%
   group_by(Species) %>% 
   summarise_at(vars(col_name), funs(mean(.[Sepal.Width > 3])))
# A tibble: 3 x 2
#  Species    Petal.Length
#  <fct>             <dbl>
#1 setosa             1.48
#2 versicolor         4.65
#3 virginica          5.72