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

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

问题描述

我想编写一个使用dplyr的函数,我将变量名作为字符串。不幸的是,使用NSE使得它变得相当复杂。从使用dplyr编程,我得到以下示例

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

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

my_summarise(df,g1)

但是,我想写功能而不是 g1 I可以提供g1,我无法围绕如何做到这一点。

解决方案

Afaik,你可以使用 as.name sym (从 rlang 包 - 我不知道如果 dplyr 将导入它最终):

  library(dplyr)
my_summarise< - function(df,var){
var< - rlang :: sym(var)
df%>%
group_by(!! var)%>%
summaryize(mpg = mean(mpg))
}

  my_summarise<  -  function(df,var){
var < - as.name(var)
df%>%
group_by(!! var) %>%
总结(mpg =平均(mpg))
}

my_summarise(mtcars,cyl)
##一个琐事:3×2
#cyl mpg
#< dbl> < DBL>
#1 4 26.66364
#2 6 19.74286
#3 8 15.10000


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)

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.

解决方案

Afaik, you could use as.name or sym (from the rlang package - I dunno 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))
}

or

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天全站免登陆