【问题标题】:How to use ddply + summarise in custom function如何在自定义函数中使用 ddply + summarise
【发布时间】:2019-12-07 13:11:53
【问题描述】:

我正在尝试在自定义函数中使用 ddply-summarise 函数(例如 mean())。但是,它不会生成每个组的平均值,而是生成一个显示所有观察值平均值的数据框。

非常感谢您的帮助!

library(plyr)
library(dplyr)
df <- data.frame(Titanic)
colnames(df)

# ddply-summarise - Outside of function
df.OutsideOfFunction <- ddply(df, c("Class","Sex"), summarise,
                          Mean=mean(Freq))

# new function
newFunction <- function(data, GroupVariables, ColA){ 
  mean(data[[ColA]])
  plyr::ddply(data, GroupVariables, summarise,
                       Mean=mean(data[[ColA]]))
}

#ddply-summarise - InsideOfFunction
df.InsideOfFunction <- newFunction(data=df,
                                   GroupVariables=c("Class","Sex"),
                                   ColA ="Freq")

【问题讨论】:

  • 我在尝试执行您的代码时遇到错误。它在您的环境中有效吗?
  • 对我来说它有效。一位同事刚刚尝试并首先收到一条错误消息 - 关闭/重新打开 RStudio 后,它也对她有用。

标签: r dataframe plyr


【解决方案1】:

它应该以这种方式工作,首先将 ColA 输入转换为符号,然后对其进行评估:

# new function
newFunction <- function(data, GroupVariables, ColA){ 
  #mean(data[[ColA]])
  plyr::ddply(data, GroupVariables, summarise, Mean=mean(UQ(sym(ColA))))
}

请查看this 帖子,了解为什么会发生这种情况。这是我第一次亲眼看到它,所以我不是解释它的最佳人选 - 看起来这取决于 summarize 和/或其他 plyrdplyr 函数接受参数作为输入的方式(使用/不带引号)以及如何评估这些。

此外,由于您也在加载 dplyr,如果您愿意,您可以坚持使用一个包并像这样编写您的函数:

newFunction <- function(data, GroupVariables, ColA){
  data %>% group_by(.dots=GroupVariables) %>% summarise(Mean=mean(UQ(sym(ColA))))
}

希望对你有帮助

【讨论】:

  • 非常感谢您的快速回复!您的两个建议都有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 2012-06-02
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多