【发布时间】:2011-04-28 05:10:36
【问题描述】:
我正在使用 R 中名为 exp (file here) 的大型数据框。出于性能考虑,建议我从 plyr 中检查 idata.frame() 函数。但我觉得我用错了。
我原来的电话,很慢但有效:
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
也许我的错误在于我如何指定分组?有人知道如何使我的示例工作吗?
预计到达时间:
我也试过了:
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。
【问题讨论】:
-
是的,
idata.frame仍处于试验阶段,因此最好直接使用它而不是使用像colwise这样的汇总函数 -
鉴于您正在寻找大数据的性能,我会花时间查看
data.table包
标签: performance r plyr data.table