首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dplyr动态总结函数定义中的内容

使用dplyr动态总结函数定义中的内容
EN

Stack Overflow用户
提问于 2016-07-18 19:59:22
回答 1查看 1.1K关注 0票数 2

假设我们从以下几个方面开始:

代码语言:javascript
复制
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",它返回与以下代码相同的输出:

代码语言:javascript
复制
tbl %>%
    group_by(class) %>%
    summarise(mean(value))

我的第一次尝试是:

代码语言:javascript
复制
summarise_means <- function(data, values, groupby) {
  data %>%
    group_by(groupby) %>%
    summarise(mean(values))
}

当然,失败了

代码语言:javascript
复制
Error: unknown variable to group by : groupby 

经过一番深入研究,我决定我应该使用group_by_summarize_函数,但我怀疑在这里使用它们是错误的,因为这仍然无法工作:

代码语言:javascript
复制
summarise_means <- function(data, values, groupby) {
  data %>%
    group_by_(groupby) %>%
    summarise_(mean(values))
}

当我打电话给summarise_means(tbl, 'value', 'class')时,我得到:

代码语言:javascript
复制
# 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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-18 20:13:04

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38445041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档