首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为数据中的每一行对另一个数据帧中的每一行应用函数

为数据中的每一行对另一个数据帧中的每一行应用函数
EN

Stack Overflow用户
提问于 2017-07-13 12:39:34
回答 2查看 709关注 0票数 0

我有两个数据,"a“和"b”。它们都有gps数据,但"a“有1000行,"b”有5行。我将距离与haversine公式进行比较,但我想应用该函数,以便将"a“的每一行与"b”的每一行进行比较。我应该得到5000的结果。

这是我到目前为止所得到的,但它只给了我1000个结果:

代码语言:javascript
复制
library(geosphere)

for(i in 1:nrow(a)){
  distHaversine(a[,c(11,9)],b[,c(4,2)])
}

提前感谢您的帮助。

编辑

我找到了一个更好的解决方案,可以减少代码和计算时间:

代码语言:javascript
复制
library(geosphere)

result <- distm(a[ , c(11, 9)], b[ , c(4, 2)], fun = distHaversine)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-13 12:47:50

也许是像下面这样的。

代码语言:javascript
复制
result <- matrix(numeric(nrow(a)*nrow(b)), ncol = nrow(b))

for(i in seq_len(nrow(a))){
    for(j in seq_len(nrow(b))){
        result[i, j] <- distHaversine(a[i, c(11, 9)],b[j, c(4, 2)])
    }
}

result
票数 2
EN

Stack Overflow用户

发布于 2017-07-13 12:55:28

这可能是你的解决方案:

代码语言:javascript
复制
indx <- expand.grid(a=1:1000,b=1:5)

res <- apply(indx,1,function(x) distHaversine(a[x[1],],b[x[2],]))

使用expand.grid,我将两个data.frames的所有行索引组合在一起,然后使用它们在apply函数中进行索引。

要追溯计算出的距离,可以将结果作为一列添加到索引中。

代码语言:javascript
复制
> head(cbind(indx,res))
  a b      res
1 1 1 12318145
2 2 1  5528108
3 3 1 11090739
4 4 1 14962267
5 5 1 19480911
6 6 1  8936878
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45080878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档