我目前有一列坐标(CHR)以及经度和纬度(NUM)。我想创建一个函数来查找每两个坐标之间的距离。例如第一和第二坐标之间的距离,第二和第三坐标之间的距离,依此类推。 我尝试了两种方法来创建它。
data$new.Distance[2:n] <- distm(data$Coord[1:(n-1)], data$Coord[2:n], fun = distMeeus)
data$new.Distance[2:n] <- distm(
c(data$longitude[1:(n-1)], data$latitude[1:(n-1)]),
c(data$longitude[2:n], data$latitude[2:n]),
fun = distMeeus
)
我收到错误消息:
ERROR in N-1: non-numeric argument to binary operator.
该如何解决?还是有其他方法可以在R中创建它? 谢谢。
答案 0 :(得分:0)
如果您提出问题,请提供示例数据。
p <- rbind(c(0,0),c(90,90),c(10,10),c(-120,-45))
colnames(p) <- c("lon", "lat")
p
# lon lat
#[1,] 0 0
#[2,] 90 90
#[3,] 10 10
#[4,] -120 -45
要获取从第一点到第二点,第二点到第三点的距离,依此类推,可以
library(geosphere)
distGeo(p)
#[1] 10001966 8896111 13879039
或
distMeeus(p)
#[1] 10001959 8896115 13879009
要获取所有(经度/纬度)点到所有点的距离,可以使用geosphere::distm
;提供选择的距离函数(distGeo
是默认的也是最准确的)。
library(geosphere)
distm(p, fun=distGeo)
# [,1] [,2] [,3] [,4]
#[1,] 0 10001966 1565109 12317881
#[2,] 10001966 0 8896111 14986910
#[3,] 1565109 8896111 0 13879039
#[4,] 12317881 14986910 13879039 0
您也可以使用raster::pointDistance
。
library(raster)
d <- pointDistance(p, lonlat=TRUE)
as.dist(d)
# 1 2 3
#2 10001966
#3 1565109 8896111
#4 12317881 14986910 13879039
也有可能获得两组点之间的距离,可能具有不同数量的点。例如:
pointDistance(p, p[1:2,], lonlat=TRUE)
# [,1] [,2]
#[1,] 0 10001966
#[2,] 10001966 0
#[3,] 1565109 8896111
#[4,] 12317881 14986910