在函数内部为dplyr使用变量名称

时间:2018-07-16 09:21:44

标签: r dplyr

我对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)

在此先感谢您,如果之前已回答,我们深表歉意。我找不到它。

1 个答案:

答案 0 :(得分:3)

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