对于每个因子级别,我需要提取除了当前数据的所有数据子集合聚合的值。例如,有几个科目在几天内完成反应时间任务,我需要计算所有科目和所有日期的平均反应时间,但不包括计算平均值的科目。目前,我这样做:对于除当前级别以外的所有级别的每个级别的因子聚合值
library(lme4)
ddply(sleepstudy, .(Subject, Days), summarise,
avg_rt = mean(sleepstudy[sleepstudy$Subject != Subject &
sleepstudy$Days == Days,"Reaction"]), .progress="text")
它适用于小数据集,但对于大数据集可以很慢。有没有办法做得更快?
谢谢,它的工程很好。即使ddply使用相同的算法,data.table仍然更快。也有可能通过类似的方式控制每个Subject X Days组合的多个观察值:'dt [,sn:=。N,by = c(“Subject”,“Days”)]; DT [,s_avg_rt:= ifelse(SN == 1,反应,.SD [,总和(反应)]),通过= C( “主题”, “天”)]; dt [,avg_rt1:=(avg_rt * n-s_avg_rt)/(n-sn)];' –
@Andrey Chetverikov我做了一个小改动,大大提高了性能。 – Roland
@罗兰好了! –