我已经做了这个代码来查找站之间的距离,但在输出中,只有一个值。你能找到错误吗?
df <- data.frame(
station = rep(c("A", "B", "C", "D"), each = 20),
temperature = rnorm(80),
latitude = c(40.7128, 34.0522, 41.8781, 39.9526),
longitude = c(-74.0060, -118.2437, -87.6298, -75.1652)
)
stations <- unique(df$station)
my_points <- matrix(NA, nrow = length(unique(df$station)), ncol = length(unique(df$station)))
# Loop through each station combination
for (i in 1:length(stations)) {
for (j in 1:length(stations)) {
# Get temperatures for the two stations
lat1 <- df$latitude[df$station == stations[i]]
lon1 <- df$longitude[df$station == stations[i]]
lat2 <- df$latitude[df$station == stations[j]]
lon2 <- df$longitude[df$station == stations[j]]
my_points[i, j] <- as.vector(dist(matrix(c(lon1,lon2,lat1,lat2),
nrow = 2)))
}
}
distance_df <- as.data.frame(my_points)
2条答案
按热度按时间uubf1zoe1#
这里有两个问题:
rep()
以及station
。lat1 <- df$latitude[df$station == stations[i]]
返回一个向量,因为有多个匹配项。我认为你期待的是一个单一的值。只使用第一个匹配元素(因为它们现在都是向量中的相同元素,在如上所述添加rep()
之后):这给出:
一个稍微好一点的方法来找到独特的车站:
然后你可以循环遍历它们:
7rtdyuoh2#
不需要循环-只需要子集到唯一的站纬度和经度,并在其上使用
dist()
: