2016-07-26 2 views
0

Я использую scaleBy из пакета doBy R, чтобы стандартизировать переменную по условию для каждого объекта в моем наборе данных. У меня около 5137 участников моего набора данных, каждый из которых имеет около 120 наблюдений. В этом наборе данных scaleBy очень медленный (около 15 минут). Другие функции (например, summaryBy, melt, dcast) работают намного быстрее (не более 20 секунд). Интересно, есть ли более быстрые простые альтернативы для scaleBy.R: Быстрая альтернатива 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 секунд для запуска.

Смежные вопросы