マージI、列によって、これらの3つのデータ・フレーム(すなわち、9つの組み合わせ)のすべての可能なペアの組合せをマージしたい複数のデータフレームのすべての可能な組み合わせを
同じ3行毎ではなく、中を含むframe1 = data.frame(a=c(1,2,3), b=c(1,2,3), c=c(1,2,3))
frame2 = data.frame(a=c(2,1,3), b=c(2,1,3), c=c(2,1,3))
frame3 = data.frame(a=c(3,2,1), b=c(3,2,1), c=c(3,2,1))
同じ順番なので、2つのファイルの列aとbの値のペアがマージされて一致することも併合したいと思います。例:
a b c
1 1 1
2 2 2
3 3 3
+
a b c
2 2 2
1 1 1
3 3 3
=
a.x b.x c.x a.y b.y c.y
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
Iは、各マージされたファイルの列CXとCY存在の値の各対の間の差を得ることがたかっで絶対値を計算し、これらすべての差を合計することで、対応するセルの空の行列3x3に追加したい「スコア」(もちろん、これはこの例ではゼロ)を得ます(つまりスコア図2は、セル内に位置しなければならないフレーム対フレーム1、[2,1]、など):また、
Error in fix.by(by.x, x) : 'by' must specify uniquely valid columns
:私はループを実行するとき
nframes = 3
frames = c(frame1,frame2,frame3)
matrix = matrix(, nrow = nframes, ncol = nframes)
matrix_scores = data.frame(matrix)
for (i in frames){
for (j in frames)
{
x = merge(i, j, by=c("a","b"))
score = sum(abs(x$c.x - x$c.y))
matrix_scores[j,i] <- score
}
}
しかし、私は、次のメッセージを取得します私は、ループの最初の反復のために、[1,1]ライン
matrix_scores[j,i] <- score
は、あまりにも、エラーになりますが、私は、私はスコアがセルに格納したいことを表現する方法がわからないということを理解します(フレーム1対フレーム1)。
f1 f2 f3
frame1 0 0 0
frame2 0 0 0
frame3 0 0 0
あなたのコードは、いくつかの場所で問題がある
結果の行列はすべてゼロを含む3×3行列でなければなりません。データフレームをリストに格納しておらず、代わりに 'frames = c(frame1、frame2、..)'を使用しました。連結機能が正しくない 'list(frame1、frame2、...)'が良いかもしれません。ループでは、同じデータフレームが時にはそれ自身とマージされます。 –
それを変更した後、エラーは「seq_len(nrows)[i]でエラーになりました:無効な添字タイプ 'list'' – Michael
それはあなたの最終的な解決策であるとは言いませんでした。私はあなたのアプローチで多くの人の最初のエラーを示しています。 'c()'を使いたい場合は、先に進んで楽しい時間を過ごしてください。 –