42 列と 110,357,407 のマトリックスである大きなデータ フレーム/.csv があります。これは、ポイントの 2 つのデータセット (1 つは 41、もう 1 つは 110,357,407) の x 座標と y 座標から導出されたもので、行の値はこれら 2 つのポイント セット間の距離を表します (リスト 1 の各ポイントからすべての単一ポイントまでの距離)。リスト2)。最初の列はポイントのリストです (1 ~ 110,357,407)。マトリックスからの抜粋を以下に示します。
V1 V2 V3 V4 V5 V6 V7
1 38517.05 38717.8 38840.16 38961.37 39281.06 88551.03 88422.62
2 38514.05 38714.79 38837.15 38958.34 39278 88545.48 88417.09
3 38511.05 38711.79 38834.14 38955.3 39274.94 88539.92 88411.56
4 38508.05 38708.78 38831.13 38952.27 39271.88 88534.37 88406.03
5 38505.06 38705.78 38828.12 38949.24 39268.83 88528.82 88400.5
6 38502.07 38702.78 38825.12 38946.21 39265.78 88523.27 88394.97
7 38499.08 38699.78 38822.12 38943.18 39262.73 88517.72 88389.44
8 38496.09 38696.79 38819.12 38940.15 39259.68 88512.17 88383.91
9 38493.1 38693.8 38816.12 38937.13 39256.63 88506.62 88378.38
10 38490.12 38690.8 38813.12 38934.11 39253.58 88501.07 88372.85
11 38487.14 38687.81 38810.13 38931.09 39250.54 88495.52 88367.33
12 38484.16 38684.83 38807.14 38928.07 39247.5 88489.98 88361.8
13 38481.18 38681.84 38804.15 38925.06 39244.46 88484.43 88356.28
14 38478.21 38678.86 38801.16 38922.04 39241.43 88478.88 88350.75
15 38475.23 38675.88 38798.17 38919.03 39238.39 88473.34 88345.23
16 38472.26 38672.9 38795.19 38916.03 39235.36 88467.8 88339.71
私の問題は、この行列を 3 列だけに変更したいということです。最初の列は、110,357,407 行の行列の最初の列に似ています。最初のポイントから他のすべてのポイントへ)、3 番目はそれらのポイント間の距離になります。したがって、次のようになります
Back Pres Dist
1 1 3486
2 1 3456
3 1 3483
4 1 3456
5 1 3429
6 1 3438
7 1 3422
8 1 3427
9 1 3428
(背面とすべての pres の最初の値の間の距離が完了すると、pres は 2 に変わり、最終的には 41 まで進みます)
これは非常にばかげた数の行を出力することを認識していますが、これはRの外にあるいくつかのプロセスを実行するために必要な形式です.
このコードを使ってみました
cols.Output <- data.frame(col = rep(colnames(output3), each = nrow(output3)),
row = rep(rownames(output3), ncol(output3)),
value = as.vector(output3))
しかし、各列に同じ数の行が存在しないため、エラーが発生しました (そして、pres 列のニーズで実際に機能したとは思いません)。rbind.fill および cbind.fill 関数のいくつかを試してみました (plyr のものと、他の人がフォーラムで思いついたもの)。融解と再形成のいくつかも調べましたが、関数について非常に混乱しており、それらを適切に実装する方法がわかりませんでした (または、それらが必要なものに適しているかどうか)。私は長い間苦労してきたので、これについて何か助けていただければ幸いです。
編集:必要なものをもう少し明確にするために。これらの 2 つの小さなデータ セットを取得します。
back <- 5 セットの x、y ポイントを持つ 1 つのデータセット
pres <- 3 セットの x、y ポイントを持つ 1 つのデータセット
これら 2 つのデータ フレーム間の距離を計算すると、初期行列が生成されます。
Back 1 2 3
1 3427 3444 3451
2 3432 3486 3476
3 3486 3479 3486
4 3449 3438 3484
5 3483 3486 3486
そして、私の望ましい出力は次のようになります。
Back Pres Dist
1 1 3427
2 1 3432
3 1 3486
4 1 3449
5 1 3483
1 2 3444
2 2 3486
3 2 3479
4 2 3438
5 2 3486
1 3 3451
2 3 3476
3 3 3486
4 3 3484
5 3 3486