2つのデータフレーム(foo
,)に格納されている変数セット(X
)を比較しようとしています。各X
は、最大10個の値がY
に関連付けられたユニークな独立変数です。私はすべてのbar.Xとすべてのfoo.Xを比較したいのですが、それは共通の値であるY
の値を比較することです。出力はfoo.xの軸とbar.xの長さの行列である可能性があります。私が残してきた2つのデータフレームからスコアリングマトリックスを作成する
:
foo <- data.frame(x= c('a', 'a', 'a', 'b', 'b', 'b'), y=c('ab', 'ac', 'ad', 'ae', 'fx', 'fy'))
bar <- data.frame(x= c('c', 'c', 'c', 'd', 'd', 'd'), y=c('ab', 'xy', 'xz', 'xy', 'fx', 'xz'))
EDIT:
fooとbarのこの単純な例では、CとB、Dを比較する2x2の行列を返すようにしたいでしょう他の初心者が(ループは効果がありますが、おそらく非常に最適ではない)次のコードは有効ですが、以下の2つの解決方法が有効です。特にRamnathのdata.tableの使用は、非常に大きなデータフレームを処理する場合に非常に有効です。
ストアはyの値は、stack
機能
foo.list <- dlply(foo, .(x), function(x) stack(x, select = y))
bar.list <- dlply(bar, .(x),function(x) stack(x, select = y))
を使用して格納されているリストとしてデータフレームは
comparelists <- function(list1, list2) {
for (i in list1){
for (j in list2){
count <- 0
if (i[[1]] %in% j[[1]]) count <- count + 1
}
}
return count
}
出力行列を書き込む積層された2つのリストにメンバシップを比較するための関数を書く
output.matrix <- matrix(1:length(foo.list), 1:length(bar.list))
for (i in foo.list){
for (j in bar.list){
output.matrix[i,j] <- comparelists(i,j)
}
}
感謝@ramnath - これは確かに非常にエレガントで簡単なソリューションです。残念ながら、この男はデータセット全体に適用するとコンピュータもクラッシュします。私は自分のデータを処理するためにPythonを使用する私のpre-R戦略に戻ると思います(私はデータを繰り返し、ファイルに結果を書き込んでコンピュータが壊れないようにします)。 capabilites。 – zach
'foo'と' bar'の大きさはどれくらいありますか? – Ramnath
私の編集をチェックしてください。それは 'data.table'を使用して' merge'を行いますので、非常に効率的です。これはあなたのために働くかどうか確認できますか?そのステップがボトルネックであれば、データをキャストする効率的な方法を見つけようとしています。 – Ramnath