使用字符串作为输入使用 dplyr 编程 [英] Programming with dplyr using string as input
问题描述
我想编写一个在内部使用 dplyr 的函数,并以字符串形式提供变量名.不幸的是 dplyr-s 对 NSE 的使用使它变得相当复杂.从 Programming with dplyr 我得到以下示例
I would like to write a function that uses dplyr inside and I supply variable names as strings. Unfortunately dplyr-s use of NSE makes it rather complicated. From Programming with dplyr I get the following example
my_summarise <- function(df, var) {
var <- enquo(var)
df %>%
group_by(!!var) %>%
summarise(a = mean(a))
}
my_summarise(df, g1)
但是,我想编写函数而不是 g1
我可以提供 "g1"
并且我无法解决如何做到这一点.
However, I would like to write function where instead of g1
I could provide "g1"
and I am not able to wrap my head around how to do that.
推荐答案
dplyr >= 1.0
使用双大括号和cross函数的组合:
Use combination of double braces and the across function:
my_summarise2 <- function(df, group_var) {
df %>% group_by(across({{ group_var }})) %>%
summarise(mpg = mean(mpg))
}
my_summarise2(mtcars, "cyl")
# A tibble: 3 x 2
# cyl mpg
# <dbl> <dbl>
# 1 4 26.7
# 2 6 19.7
# 3 8 15.1
# same result as above, passing cyl without quotes
my_summarise(mtcars, cyl)
dplyr <1.0
据我所知,你可以使用 as.name
或 sym
(来自 rlang
包 - 我不知道dplyr
最终会导入它):
As far as I know, you could use as.name
or sym
(from the rlang
package - I don't know if dplyr
will import it eventually):
library(dplyr)
my_summarise <- function(df, var) {
var <- rlang::sym(var)
df %>%
group_by(!!var) %>%
summarise(mpg = mean(mpg))
}
或
my_summarise <- function(df, var) {
var <- as.name(var)
df %>%
group_by(!!var) %>%
summarise(mpg = mean(mpg))
}
my_summarise(mtcars, "cyl")
# # A tibble: 3 × 2
# cyl mpg
# <dbl> <dbl>
# 1 4 26.66364
# 2 6 19.74286
# 3 8 15.10000
这篇关于使用字符串作为输入使用 dplyr 编程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!