目的は、データフレーム内の因子/文字列変数のインジケータを作成することです。そのデータフレームは> 2mmの行を持ち、ウィンドウで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)
あなたの例では混乱しています。 'dd $ id'で' dd $ prd'を分割し、各idにどのprdsの値が含まれているかを確認しますが、 'prds'はソートされません(!)' prds < - sortユニークな(dd $ prd)) '(それは私にはもっと意味をなさないでしょう...)? –
prdsで利用可能な要素に対応するインジケータ(論理)がIDを渡って同じ順序を持つ限り、ソート方法は関係ありません。 –
OK。下の私の答えで私の他の質問を参照してください... –