使用字符串作为输入使用 dplyr 编程 [英] Programming with dplyr using string as input

查看:22
本文介绍了使用字符串作为输入使用 dplyr 编程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想编写一个在内部使用 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.namesym(来自 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆