r - 如何在自定义函数中使用 ddply + summarise
问题描述
我正在尝试在自定义函数中使用 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")
解决方案
它应该以这种方式工作,首先将ColA输入转换为符号,然后对其进行评估:
# new function
newFunction <- function(data, GroupVariables, ColA){
#mean(data[[ColA]])
plyr::ddply(data, GroupVariables, summarise, Mean=mean(UQ(sym(ColA))))
}
请在这篇文章中查看为什么会发生这种情况。这是我自己第一次看到它,所以我不是解释它的最佳人选 - 看起来它取决于方式summarize
和/或其他plyr
或dplyr
函数接受参数作为输入(带/不带引号)以及如何评估这些.
此外,由于您也在加载dplyr
,如果您愿意,您可以坚持使用一个包,并像这样编写您的函数:
newFunction <- function(data, GroupVariables, ColA){
data %>% group_by(.dots=GroupVariables) %>% summarise(Mean=mean(UQ(sym(ColA))))
}
希望这可以帮助
推荐阅读
- html - 您将如何在客户端应用程序中创建可下载的 pdf?
- flutter - 在 Flutter 中,当从屏幕 B 弹回屏幕 A 时调用哪个方法
- javascript - useEffect 垃圾邮件请求
- ruby-on-rails - 在 Rails 中分组后如何处理嵌套数组键?
- node.js - npm install 返回系统调用 spawn git 错误
- react-native - 如何打开反应原生模态框?
- java - 此组件要求您指定有效的 TextAppearance 属性
- javascript - Js中多个范围滑块输入的代码修复
- python - anaconda 软件包如何需要两个通道来安装?
- ipad - 在 IPAD 上播放 html5 视频后 Phaser 3 音频失真