2016-07-26 66 views
0

我使用scaleBy從doByř包,通過在我的數據集的每個受試者的條件標準化的變量。我的數據集中有大約5137位參與者,每個參與者都有大約120個觀察值。在該數據集上,scaleBy非常慢(接近15分鐘)。其他功能(如summaryBy,melt,dcast)的工作速度更快(不超過20秒)。我想知道scaleBy是否有更快的簡單替代方案。R:A更快替代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)。 任何更快的解決方案?

回答

0

我發現了一個更快的代碼。我替換這兩條線的線scaleBy:

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

此代碼用了不到4秒運行。