我对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)
在此先感谢您,如果之前已回答,我们深表歉意。我找不到它。
答案 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