我有一个现有的工作流程,我使用ez::ezANOVA
将方差分析(ANOVA)应用于按因子分割的数据帧的每个部分。我想使用ddply
中的plyr
将我的旧版本更新为使用dplyr
的新版本。这是一个适用于ddply
的玩具示例:
require(dplyr)
require(plyr)
require(ez)
X = data.frame(
x1 = rep(factor(letters[1:2]), 20),
x2 = rep(factor(letters[1:2]), 10, each = 2),
id = factor(sort(rep(1:10, 4)))
)
# stack individual data frames into one large data frame
df = X[rep(seq_len(nrow(X)), 10),]
# add an index column to track group
df$grp = sort(rep(1:10, nrow(X)))
# add an arbitrary outcome variable
df$y = runif(400)
# define a function that extracts p-values from ezANOVA output
PVals = function(df) {
ezANOVA(
data = df, dv = y, wid = id,
within = .(x1, x2))[[1]][5]
}
我用ddply得到了我想要的东西:
ddply(df, .(grp), PVals)
我想使用dplyr方法:
df %>% group_by(grp) %>% do(PVals(.))
但这会产生错误:
ezANOVA_main出错(data = data,dv = dv,wid = wid,within = within,:“dv”必须是数字。
所以我的假设是group_by
返回的对象不包含与原始数据框相同的变量类?我该如何解决这个问题?