我在R中有2个大数据框,均具有约100k行,其中包含地理坐标列表(经/纬度)。我希望遍历它们,从而获得项之间的所有组合,然后对其应用功能。
因为组合的数量大约为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
(...)
stackoverflow中的另一篇文章([链接] Calculating great-circle distance matrix)建议使用:
apply(A,1,FUN = function(X)distHaversine(X,B))
但是,我怀疑创建的矩阵太大,无法完成计算。
有关如何有效解决此问题的任何想法?请记住,此后我的目标是应用Haversine函数计算点之间的距离。
谢谢 J
答案 0 :(得分:0)
您想要的是:
# expand.grid(A$V1,A$V2,B$V1,B$V2)
expand.grid(cbind(A,B))
但是您已经知道,结果将非常庞大,所以我不确定您的代码是否可以运行。
答案 1 :(得分:0)
cmb<-expand.grid(1:nrow(A),1:nrow(B))
cbind(A[cmb[,1],],B[cmb[,2],])
与Andre的解决方案不同,这不会在A和B中创建列的组合(他创建了81行,而对于此示例,只需要9行)。不过,不确定这是否适用于较大的数据集。