如何在R map / dplyr中使用向量引用列名



我想在调用函数时使用引号(字符串)版本的列名来引用数据帧中的列名。这是因为我想通过包含列名的各种字符向量来映射函数。(由于其他原因,我不能简单地通过数据帧本身进行映射。)

如此:

library(tidyverse)
head(iris)
summariseByGroup = function(dat, grouping_var, column_name){
dat %>%
group_by({{grouping_var}}) %>%  
summarise(sum = sum({{column_name}}))
}
summariseByGroup(iris, Species, Sepal.Length)
>  Species      sum
<fct>      <dbl>
1 setosa      250.
2 versicolor  297.
3 virginica   329.

这行不通:

summariseByGroup(iris, Species, 'Sepal.Length')
Error in `summarise()`:
! Problem while computing `sum = sum("Sepal.Length")`.
ℹ The error occurred in group 1: Species = setosa.
Caused by error in `sum()`:
! invalid 'type' (character) of argument

这是因为我无法理解求值的某些方面。

是否有一个解决方案,取消字符串和计算它作为一个列名?

跟随@Zoe的指针传递一个字符串作为dplyr::filter中的变量名

summariseByGroup2 = function(dat, grouping_var, column_name){
dat %>%
group_by({{grouping_var}}) %>%  
summarise(sum = sum(get(column_name)))
}
summariseByGroup2(iris, Species, 'Sepal.Length')
# A tibble: 3 × 2
Species      sum
<fct>      <dbl>
1 setosa      250.
2 versicolor  297.
3 virginica   329.

最新更新