计算R中的大量排列



我在R中有两个大的数据帧,都有大约100k行,其中包含地理坐标(纬度/经度(列表。我希望在它们之间进行迭代,获得项目之间的所有组合,然后对其应用一个函数

因为组合的数量大约为110亿(11 x 1.000.00000(,所以我最初使用循环的想法不适用。

数据帧类似于:

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的另一篇文章([alink]计算大圆距离矩阵(建议使用:

应用(A,1,FUN=函数(X(distHaversine(X,B((

然而,我怀疑创建的矩阵太大,无法完成计算。

关于如何有效地解决这个问题,有什么想法吗?请记住,我的目标是此后应用Haversine函数来计算点之间的距离。

谢谢J

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

与Andre的解决方案不同,这不会在A和B中的每一个中创建列的组合(他创建了81行,而对于这个示例,只需要9行(。不过,不确定这是否适用于更大的数据集。

您想要的是:

# expand.grid(A$V1,A$V2,B$V1,B$V2)
expand.grid(cbind(A,B))

但是正如您所发现的,结果将非常巨大,所以我不确定您的代码是否会运行。

相关内容

  • 没有找到相关文章

最新更新