gpt4 book ai didi

r - 对空间数据使用简单的 for 循环

转载 作者:行者123 更新时间:2023-12-04 23:46:17 25 4
gpt4 key购买 nike

对不起,这将是一个 for 循环 101 问题。我正在努力编写一个简单的 for 循环来根据经纬度数据生成城市之间的距离表

locations <-read.csv("distances.csv")

位置返回下表:
       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(即所有城市与它们的距离为零)。

为此,我使用了 sp 包,它需要一个 long-lat 值矩阵,因此我可以按如下方式删除文本:
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)
}

这为我提供了 NY 的正确值:
[1]  5436.133 12967.023  6697.541     0.000

所以我想我已经在整个循环中覆盖了一个城市。我很感激帮助我告诉我我哪里出错了。非常感谢。

最佳答案

首先声明一个矩阵并使用您的迭代器 i表示要填写的行:

kmnew <- matrix(NA, nrow=4, ncol=4)
for (i in 1:nrow(datmax2)){
kmnew[i,] <- spDistsN1(datmax2, datmax2[i,], longlat=TRUE)
}

colnames(kmnew) <- locations$City
rownames(kmnew) <- locations$City

结果
> kmnew

Sheffield HK Venice New York
Sheffield 0.000 9591.009 1329.882 5436.134
HK 9591.009 0.000 9134.698 12967.024
Venice 1329.882 9134.698 0.000 6697.541
New York 5436.134 12967.024 6697.541 0.000

关于r - 对空间数据使用简单的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29430303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com