【问题标题】:How to pass more complex functions to summarise_if or mutate_if? [duplicate]如何将更复杂的函数传递给 summarise_if 或 mutate_if? [复制]
【发布时间】:2020-04-04 20:07:52
【问题描述】:

我有一个模板,我用它从源头汇总我的数据以获得均值和 95% 的置信水平,以便在 ggplot 中绘制这些(最初改编自多年前的 Stack Overflow 帖子,很抱歉,但我不知道'不知道原始来源)看起来像:

data %>%
  group_by(var1, var2) %>%
  summarise(count=n(),
            mean.outcome_variable = mean(outcome_variable, na.rm = TRUE),
            sd.outcome_variable = sd(outcome_variable, na.rm = TRUE),
            n.outcome_variable = n(),
            total.outcome_variable = sum(outcome_variable)) %>%
  mutate(se.outcome_variable = sd.outcome_variable / sqrt(n.outcome_variable),
         lower.ci.outcome_variable = mean.outcome_variable - qt(1 - (0.05 / 2), n.outcome_variable - 1) * se.outcome_variable,
         upper.ci.outcome_variable = mean.outcome_variable + qt(1 - (0.05 / 2), n.outcome_variable - 1) * se.outcome_variable)

这适用于一个或两个结果变量,但复制和粘贴大量结果变量变得不切实际,所以我希望使用 summarise_if 代替我有大量结果变量都是数字的。但是,我不知道如何在“funs”参数中指定比简单函数(例如“mean”或“sd”)更复杂的东西。我试过 gmodels::ci() 如下:

dataset_aggregated <- data %>%
  group_by(var1, var2) %>%
  summarise_if(is.numeric, funs(mean, lowCI = ci()[2], hiCI = ci()[3])) # does not work without brackets either

然而这会导致

Error in summarise_impl(.data, dots) : 
  Evaluation error: no applicable method for 'ci' applied to an object of class "NULL".

如何让它工作?

【问题讨论】:

  • 查看summarise() 范围变体的帮助文件。它看起来像这样:summarise_if(is.numeric, list(mean = ~mean(.), lowCI = ~ci(.)[2], hiCI = ~ci(.)[3]))
  • 谢谢!这会派上用场的!

标签: r dplyr conditional-statements


【解决方案1】:

当我准备好发布问题时,我想出了如何做到这一点,但我想我会分享以防其他人遇到同样的问题,因为答案非常简单,我不敢相信它花了我想了很久。基本上我只是制作了自定义的 lci() 和 uci() 函数来将结果从 gmodels::ci() 中分离出来并改为调用它们,例如

lci <- function(data) {
  as.numeric(ci(data)[2])
}

uci <- function(data) {
  as.numeric(ci(data)[3])
}

dataset_aggregated <- dataset %>%
  group_by(var1, var2) %>% #you can group by however many you want here, just put them in the select statement below
  summarise_if(is.numeric, funs(mean, lci, uci)) %>% 
  select(var1, var2, sort(current_vars())) #sorts columns into lci, mean, uci for each outcome variable alphabetically

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2014-04-01
    相关资源
    最近更新 更多