Цель состоит в том, чтобы создать индикаторы для факторной/строковой переменной во фрейме данных. Этот фрейм данных имеет строки > 2 мм, и при запуске R в Windows у меня нет возможности использовать plyr с .parallel=T. Поэтому я иду по пути «разделяй и властвуй» с plyr и reshape2.
При запуске расплава и литья заканчивается память, а использование
ddply( idata.frame(items) , c("ID") , function(x){
( colSums( model.matrix( ~ x$element - 1) ) > 0 )
} , .progress="text" )
или
ddply( idata.frame(items) , c("ID") , function(x){
( elements %in% x$element )
} , .progress="text" )
занимает некоторое время. Самый быстрый подход — вызов tapply ниже. Вы видите способ ускорить это? Оператор %in% выполняется быстрее, чем вызов model.matrix. Спасибо.
set.seed(123)
dd <- data.frame(
id = sample( 1:5, size=10 , replace=T ) ,
prd = letters[sample( 1:5, size=10 , replace=T )]
)
prds <- unique(dd$prd)
tapply( dd$prd , dd$id , function(x) prds %in% x )