Генерация индикаторов в больших фреймах данных

Цель состоит в том, чтобы создать индикаторы для факторной/строковой переменной во фрейме данных. Этот фрейм данных имеет строки > 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 )
5
задан Arun 28 March 2013 в 08:55
поделиться