R:scaleBy的更快替代品

时间:2016-07-26 15:11:41

标签: r

我正在使用doBy R包中的scaleBy来为我的数据集中每个主题的条件标准化变量。我的数据集中有大约5137个参与者,每个参与者有大约120个观察结果。在该数据集上,scaleBy非常慢(接近15分钟)。其他功能(例如,summaryBy,melt,dcast)工作得更快(不超过20秒)。我想知道scaleBy是否有更快的简单替代方案。

这是一个模拟代码,您可以根据参与者数量,每个参与者中的条件数量(重复测量设计)以及每个参与者的每个条件的观察数量来模拟我的数据集:

nSubj <- 5137
valuesPerSubj <- 120
nobs <- nSubj*valuesPerSubj
ttt <- data.frame(cond=rep(c('a','b','c','d'),nobs/4), rt=rnorm(nobs,mean=700,sd=150), subj=rep(seq(1:nSubj),valuesPerSubj))

start <- Sys.time()
zt <- scaleBy(rt ~ subj+cond, data=ttt)
end <- Sys.time()
duration <- end-start
duration

此代码中的scaleBy占用我的计算机11.7分钟(您可以在上面的代码中减少nSubj以便更快地进行测试)。 任何更快的解决方案?

1 个答案:

答案 0 :(得分:0)

我找到了更快的代码。我用这两行替换了scaleBy行:

&#13;
&#13;
gttt <- group_by(ttt,subj,cond)
zt <- mutate(gttt,zrt=as.numeric(scale(rt)))
&#13;
&#13;
&#13;

此代码运行时间不到4秒。