【问题标题】:Using Variable names for dplyr inside function在函数内部为 dplyr 使用变量名
【发布时间】:2018-12-23 19:17:56
【问题描述】:

我对 R 比较陌生,并且在使用 dplyr 内部函数时遇到了问题。我浏览了论坛,查看了所有类似的问题,但我无法解决我的问题。我试图用下面的例子来简化我的问题

df <- tibble(
  g1 = c(1, 2, 3, 4, 5),
  a = sample(5),
  b = sample(5)
)

我想写一个函数来计算a和b之和如下:

sum <- function(df, group_var, a, b) {
group_var <- enquo(group_var)
 a <- enquo(a)
 b <- enquo(b)

 df.temp<- df %>%
   group_by(g1) %>%
   mutate(
      sum = !!a + !!b
   )

  return(df.temp)
 }

我可以通过这一行调用函数:

df2 <- sum(df, g1, a, b)

我的问题是我不想在函数调用中对列名进行硬编码,因为列名“g1”、“a”和“b”可能会改变。因此,我将列名从配置文件 (config.yml) 分配给了一个变量。

但是当我使用变量时,我遇到了多个问题。有人可以在这里指导我吗?对于所有列名引用,理想情况下我希望使用变量。例如我在这段代码中遇到了问题:

A.Key <- "a"
B.Key <- "b"
df2 <- sum(df, g1, A.Key, B.Key)

在此先感谢,如果之前已经回答过,我们深表歉意;没找到。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:
    sum1 <- function(df, group_var,x,y) {
    
      group_var <- enquo(group_var)
    
      x = as.name(x)
      y = as.name(y)
    
      df.temp<- df %>%
        group_by(!!group_var) %>%
        mutate(
          sum = !!enquo(x)+!!enquo(y)
        )
    
      return(df.temp)
    }
    
    sum1(df, g1, A.Key, B.Key)
    # A tibble: 5 x 4
    # Groups:   g1 [5]
         g1     a     b   sum
      <dbl> <int> <int> <int>
    1    1.     3     2     5
    2    2.     2     1     3
    3    3.     1     3     4
    4    4.     4     4     8
    5    5.     5     5    10
    

    【讨论】:

    • @phiver 抱歉。我没有读完这个问题。谢谢。检查编辑
    • 非常感谢 Onyambu!这似乎现在对我有用!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多