如何在自定义函数中使用ddply + summarize
How to use ddply + summarise in custom function
我正在尝试在自定义函数中使用 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))))
}
请在 post 中查看为什么会发生这种情况。这是我自己第一次看到它,所以我不是最好的解释者 - 看起来它取决于 summarize
and/or 其他 plyr
或 [=14= 的方式] 函数接受参数作为输入(with/without 引用)以及如何评估这些参数。
此外,由于您也在加载 dplyr
,如果您愿意,可以坚持使用一个包并像这样编写您的函数:
newFunction <- function(data, GroupVariables, ColA){
data %>% group_by(.dots=GroupVariables) %>% summarise(Mean=mean(UQ(sym(ColA))))
}
希望对您有所帮助
我正在尝试在自定义函数中使用 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
and/or 其他 plyr
或 [=14= 的方式] 函数接受参数作为输入(with/without 引用)以及如何评估这些参数。
此外,由于您也在加载 dplyr
,如果您愿意,可以坚持使用一个包并像这样编写您的函数:
newFunction <- function(data, GroupVariables, ColA){
data %>% group_by(.dots=GroupVariables) %>% summarise(Mean=mean(UQ(sym(ColA))))
}
希望对您有所帮助