dplyr:传递列名以总结函数内部

N08*_*N08 4 r dataframe dplyr

我有以下示例,其中我将一个简单的数据帧传递给一个总结列的函数。我想将汇总列的名称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)

akr*_*run 5

如果我们传递一个带引号的参数,那么一个选项是在 后面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" )