gpt4 book ai didi

r - 将参数传递给 dplyr 中的 group_by 函数

转载 作者:行者123 更新时间:2023-12-02 18:06:46 25 4
gpt4 key购买 nike

我尝试在 dplyr (R) 的函数调用中使用 group_by ,但得到了意外的结果。这是我正在尝试做的一个示例:

df = data.frame(a = c(0,0,1,1), b = c(0,1,0,1), c = c(1,2,3,4))

result1 = df %>%
group_by(a,b) %>%
mutate(d = sum(c))
result1$d

myFunc <- function(df, var) {
output = df %>%
group_by(a,!!var) %>%
mutate(d = sum(c))
return(output)
}

result2 = myFunc(df,"b")
result2$d

result1$d 产生 [1,2,3,4] 这是我所期望的。 result2$d 产生 [3,3,7,7] 我不想要,我不确定发生了什么。

可以使用 b(不带引号)作为函数参数,并用 {{var}} 代替 !!var。不幸的是,就我而言,我的列名称采用字符串格式(但也许有一种方法可以预先转换字符串,以便它可以使用 {{}} 表示法?)

最佳答案

如果你想传递一个可以引用数据框某一列的字符对象,你应该使用!!sym(var):

myFunc <- function(df, var) {
output = df %>%
group_by(a, !!sym(var)) %>%
mutate(d = sum(c))
return(output)
}

myFunc(df, "b")

如果要传递数据屏蔽参数,应使用 {{ var }} 或等效的 !!enquo(var):

myFunc <- function(df, var) {
output = df %>%
group_by(a, {{ var }}) %>%
mutate(d = sum(c))
return(output)
}

myFunc(df, b)

请注意,在两种不同的情况下,我分别将 "b"b 传递到函数中。

关于r - 将参数传递给 dplyr 中的 group_by 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73075994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com