r - 使用字符串作为输入使用 dplyr 编程

标签 r dplyr

我想编写一个在内部使用 dplyr 的函数,并将变量名作为字符串提供。不幸的是 dplyr-s 对 NSE 的使用使它变得相当复杂。来自 Programming with dplyr我得到以下示例

my_summarise <- function(df, var) {
  var <- enquo(var)

  df %>%
    group_by(!!var) %>%
    summarise(a = mean(a))
}

my_summarise(df, g1)

但是,我想写函数 where 而不是 g1我可以提供"g1"我无法理解如何做到这一点。

最佳答案

dplyr >= 1.0
使用双大括号和 cross 函数的组合:

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.namesym (来自 rlang 包 - 我不知道 dplyr 最终是否会导入它):
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

关于r - 使用字符串作为输入使用 dplyr 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44121728/

相关文章:

r - 创建一个表,提供 R 中 B 列和 C 列的 A 列的平均值

r - 转为 base58 的十六进制字符串

r - 禁止coxph中的特定警告会导致cox.zph错误

r - 按定义的间隔切割

r - 来自 "local data frame"的 `dplyr:::print.tbl_df` 消息是什么意思?

r - dplyr 重铸 - 未找到变量

r - 如何使用 patchwork 在 ggplot2 中添加第二个标题?

r - dplyr::if_else - 检查条件并插入 NA 作为评估的一部分

r - 为什么 dplyr 无法按行生成结果?

r - dplyr everything() 参数字符串 select_