目的は、データ フレーム内の因子/文字列変数のインジケーターを作成することです。そのデータフレームの行数は 2mm を超えており、Windows で R を実行すると、.parallel=T で plyr を使用するオプションがありません。そこで、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 )