我有以下示例,其中我将一个简单的数据帧传递给一个总结列的函数。我想将汇总列的名称s作为函数的参数:
df <- data.frame(id = c(1,1,1,1,1,2,2,2,2,2),
a=c(1:10),
b=c(10:19))
sum <- function(df, s){
df <- df %>%
group_by(id) %>%
summarize(s = sum(a))
return(df)
}
sum(df = df, s = "summarizing.column.label")
Run Code Online (Sandbox Code Playgroud)
但是,无论我设置什么值,summarizing-column 总是获得相同的 name s。有办法改变它吗?
编辑:我想要的输出是:
sum(df = df, s = "summarizing.column.label")
id summarizing.column.label
<dbl> <int>
1 1.00 15
2 2.00 40
sum(df = df, s = "a")
id a
<dbl> <int>
1 1.00 15
2 2.00 40
Run Code Online (Sandbox Code Playgroud)
如果我们传递一个带引号的参数,那么一个选项是在 后面summarise,我们使用rename_at
sumf <- function(df, s){
df %>%
group_by(id) %>%
summarize(a = sum(a))%>%
rename_at("a", ~ s)
}
sumf(df, s ="summarizing.column.label" )
# A tibble: 2 x 2
# id summarizing.column.label
# <dbl> <int>
#1 1.00 15
#2 2.00 40
sumf(df, s ="a" )
# A tibble: 2 x 2
# id a
# <dbl> <int>
#1 1.00 15
#2 2.00 40
Run Code Online (Sandbox Code Playgroud)
或者另一种选择是使用:=with!!
sumf <- function(df, s){
df %>%
group_by(id) %>%
summarize(a = sum(a))%>%
rename(!! (s) := a)
}
sumf(df, s ="summarizing.column.label" )
# A tibble: 2 x 2
# id summarizing.column.label
# <dbl> <int>
#1 1.00 15
#2 2.00 40
Run Code Online (Sandbox Code Playgroud)
或以内summarise
sumf <- function(df, s){
df %>%
group_by(id) %>%
summarise(!!(s) := sum(a))
}
Run Code Online (Sandbox Code Playgroud)
sumf(df, s ="summarizing.column.label" )