使用dplyr动态总结函数定义内部

时间:2016-07-18 19:59:23

标签: r dplyr

假设我们从以下开始:

library(dplyr)
library(magrittr)
library(tibble)

set.seed(123)

tbl <- data_frame(value=rnorm(100), class=rep(LETTERS[1:5], each=20))

我想写一个函数summarize_means(data, values, groupby),给定tbl"value""class",返回与以下代码相同的输出:< / p>

tbl %>%
    group_by(class) %>%
    summarise(mean(value))

我的第一次尝试是:

summarise_means <- function(data, values, groupby) {
  data %>%
    group_by(groupby) %>%
    summarise(mean(values))
}

当然,

失败了
Error: unknown variable to group by : groupby 

经过一些挖掘,我确定我应该使用group_by_summarize_函数,但我怀疑我在这里使用不正确,因为这仍然无法正常工作:

summarise_means <- function(data, values, groupby) {
  data %>%
    group_by_(groupby) %>%
    summarise_(mean(values))
}

当我致电summarise_means(tbl, 'value', 'class')时,我得到:

# A tibble: 5 x 2
  class NA_real_
  <chr>    <dbl>
1     A       NA
2     B       NA
3     C       NA
4     D       NA
5     E       NA
Warning message:
In mean.default(values) : argument is not numeric or logical: returning NA

我真的不明白这里出了什么问题。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您需要将该函数与参数一起传递:

summarise_means <- function(data, values, groupby) {
            data %>%
                    group_by_(groupby) %>%
                    summarise_(Mean = values)
    }

summarise_means(tbl, 'mean(value)', 'class')

# A tibble: 5 x 2
  class        Mean
  <chr>       <dbl>
1     A  0.14162380
2     B -0.05125716
3     C  0.10648523
4     D -0.11991706
5     E  0.37509474