我正在尝试创建一个函数,该函数自动在具有感兴趣的列(y)的特定数据帧(x)上执行dplyr的group_by和summarize命令。我写的代码是:
mysummary <– function(x, y){
k = x %>%
group_by(x$y) %>%
summarize(col.name = mean(var.name))
return(k)
}
这要么根本不起作用(如果我只是在group_by函数中使用y作为参数,说明没有名为y的列),要么使用上面的当前代码返回一个相同的tibble,而不管我按什么分组(在这种情况下,它总是按dataset中的变量year分组,而不管我使用什么作为y参数)。有没有人能解释一下为什么这个不起作用?
发布于 2020-06-26 22:15:57
如果参数是y
,那么我们不需要在group_by
中使用x$y
,可以使用ensym
和evaluate (!!
)将其转换为symbol。优点是它可以接受'y‘的带引号或不带引号的参数
library(dplyr)
f1 <- function(x, y) {
x %>%
group_by(!!ensym(y)) %>%
summarize(col.name = mean(var.name))
}
这里,我们假设“var.name”作为数据集“x”中的列名。
发布于 2020-06-27 03:25:32
我们可以使用卷曲({{}}
)运算符:
library(dplyr)
library(rlang)
mysummary <– function(x, y) {
k = x %>% group_by({{y}}) %>% summarize(col.name = mean(var.name))
return(k)
}
您可以将其用作:
data %>% mysummary(col_name)
https://stackoverflow.com/questions/62603515
复制相似问题