R对数据帧组应用函数

时间:2014-12-15 09:30:21

标签: r split-apply-combine

我需要分别对每个主题运行ANOVA。 我有一个数据框,包含来自37个科目的数据,我不想循环37次,每个科目分别运行37次ANOVA。 这些是我数据的前4行:

        latency subject     trialcode
   1    1385    14233664    neighbour
   2    2493    14233664    neighbour
   3    1429    14233664    neighbour
   4    1884    14233664    neighbour

这是我的代码:

 tmp <- with(as.data.frame(data),
        by(data$subject,
           function(x) aov(latency ~ trialcode + Error(trialcode), data=data)))
 sapply(tmp, coef)

但是我收到一条错误消息:

Error in unique.default(x, nmax = nmax) : 

unique()仅适用于矢量

任何帮助表示赞赏 感谢

1 个答案:

答案 0 :(得分:0)

我认为by电话不正确。如果我使用data(npk)

do.call(rbind,by(npk[,-1], npk$block,
      FUN=function(x) coef(aov(yield~N+P+K, data=x))))

对于您的数据,可能是

do.call(rbind, by(data[,-2], data$subject, 
     FUN=function(x) coef(aov(latency ~ trialcode+ Error(trialcode), x))))

或使用data.table

library(data.table)
setkey(setDT(data), subject)[, as.list(coef(aov(latency~trialcode+
           Error(trialcode))),by=subject]