如何在自定义函数中使用ddply + summary

时间:2019-07-30 07:42:14

标签: r dataframe plyr

我正在尝试在自定义函数中使用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")

1 个答案:

答案 0 :(得分: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))))
}

希望这会有所帮助