很抱歉,这是一个for循环101的问题。我无法编写一个简单的for循环来生成基于经纬度数据的城市之间距离的表格。
locations <-read.csv("distances.csv")
locations返回以下表格:
City Type long lat
1 Sheffield EUR -1.470085 53.38113
2 HK WRLD 114.109497 22.39643
3 Venice EUR 12.315515 45.44085
4 New York WRLD -74.005941 40.71278
在此任务的特定部分中,我要制作一张城市之间距离(以千米为单位)的表格,并呈现成相关矩阵的形式,其中对角线上的数值都是0(即所有城市到自身的距离均为0)。
为此,我使用了sp包,该包需要一个经度-纬度数值的矩阵,所以我可以按以下方法删除文本:
datmax <- data.matrix(locations)
datmax2 <- datmax[,-1:-2]
spDistsN1工具可以通过比较矩阵中所有城市到一个特定城市的距离,来获取这些信息。显然,我可以使用下面的表达式来获取所有城市到谢菲尔德(城市或行号#1)的距离:
km <- spDistsN1(datmax2, datmax2[1,], longlat=TRUE)
这将正确给出:
[1] 0.000 9591.009 1329.882 5436.133
然而,为了达到我想要的相关矩阵样式输出,我希望对每个城市都进行此操作。因此,我尝试编写了一个for循环:
for (i in 1:nrow(datmax2)){
kmnew <- spDistsN1(datmax2, datmax2[i,], longlat=TRUE)
}
这为我提供了纽约的正确数值:
[1] 5436.133 12967.023 6697.541 0.000
我猜测在循环中我把一个城市写成了另一个城市。感谢您帮助我找到错误所在,非常感谢。