Я работаю с большим фреймом данных, который называется exp ( file здесь ) в R. В интересах производительности было предложено проверить функцию idata.frame () из plyr. Но я думаю, что я использую это неправильно.
Мой оригинальный звонок, медленно, но работает:
df.median<-ddply(exp,
.(groupname,starttime,fPhase,fCycle),
numcolwise(median),
na.rm=TRUE)
С idata.frame, Error: is.data.frame(df) is not TRUE
library(plyr)
df.median<-ddply(idata.frame(exp),
.(groupname,starttime,fPhase,fCycle),
numcolwise(median),
na.rm=TRUE)
Итак, я подумал, возможно, это мои данные. Поэтому я попробовал набор данных baseball
. Пример idata.frame
работает нормально: dlply(idata.frame(baseball), "id", nrow)
Но если я попробую что-то похожее на мой желаемый вызов, используя baseball
, он не будет работать:
bb.median<-ddply(idata.frame(baseball),
.(id,year,team),
numcolwise(median),
na.rm=TRUE)
>Error: is.data.frame(df) is not TRUE
Возможно, моя ошибка в том, как я указываю группировки? Кто-нибудь знает, как заставить мой пример работать?
ETA:
Я тоже пробовал:
groupVars <- c("groupname","starttime","fPhase","fCycle")
voi<-c('inadist','smldist','lardist')
i<-idata.frame(exp)
ag.median <- aggregate(i[,voi], i[,groupVars], median)
Error in i[, voi] : object of type 'environment' is not subsettable
, который использует более быстрый способ получения медиан, но дает другую ошибку. Я не думаю, что понимаю, как использовать idata.frame.