1

Rには2つの大きなデータフレームがあり、どちらも約10万行で、地理座標(緯度/経度)のリストを保持しています。アイテム間のすべての組み合わせを取得してから、関数を適用することを繰り返します。

組み合わせの数は約 110 億 (11 x 1.000.000.000) であるため、ループを使用するという当初のアイデアは適用されません。

データフレームは次のようになります。

A<-as.data.frame(cbind(rbind(-0.1822,-0.4419,0.2262),rbind(51.5307,51.4856,51.4535)))

(...)
<!-- -->

V1 . V2

-0.1822 . 51.5307 

-0.4419 . 51.4856

 0.2262 . 51.4535

B<- as.data.frame(cbind(rbind(-0.4764,-0.2142,-0.2197),rbind(51.5221,51.4593,51.5841))) 
(...)
<!-- -->

V1 . V2

-0.4764 . 51.5221

-0.2142 . 51.4593

-0.2197 . 51.5841

出力を次のようにしたいと思います。

V1a .   V2a .   V1b .   V2b


-0.1822 . 51.5307 . -0.4764 . 51.5221  

-0.4419 . 51.4856 . -0.4764 . 51.5221

 0.2262 . 51.4535 . -0.4764 . 51.5221

-0.1822 . 51.5307 . -0.2142 . 51.4593

-0.4419 . 51.4856 . -0.2142 . 51.4593

(...)

ここのスタックオーバーフローの別の投稿 ([リンク]大圏距離行列の計算) では、次の使用が提案されています。

apply(A, 1, FUN=関数(X) distHaversine(X, B))

ただし、作成された行列が大きすぎて計算を完了できないのではないかと思います。

これを効率的に解決する方法についてのアイデアはありますか? その後、Haversine関数を適用してポイント間の距離を計算することが私の目的であることを覚えておいてください。

ありがとうJ

4

2 に答える 2

0
cmb<-expand.grid(1:nrow(A),1:nrow(B))
cbind(A[cmb[,1],],B[cmb[,2],])

アンドレのソリューションとは異なり、これは A と B のそれぞれに列の組み合わせを作成しません (彼は 81 行を作成しますが、このサンプルでは 9 行のみが必要です)。ただし、これがより大きなデータセットで機能するかどうかはわかりません。

于 2018-11-05T14:33:54.557 に答える