我正在使用 R,并构建了一个矩阵来计算 n 个位置之间的距离。我需要计算每个位置的最近邻,并填充位置 ID、最近邻 ID 和距离的结果矩阵。
这是 data.frame(注意应用程序代码使用一个函数来计算与 Long/Lat 的距离,下面是结果数据框。)我还将距离分配给它自己 999 所以它不会被选为最近的邻居.
distdf <- data.frame("New York" = c(0, 713, 2451, 748), "Chicago" = c(713, 0, 1745, 587), "Los Angeles" = c(2451,1745, 0, 1936), "Atlanta" = c(748, 587, 1936, 0), row.names = c("New York", "Chicago", "Los Angeles", "Atlanta"))
distdf[distdf ==0]<- 9999
从这里,我想找到最小距离和具有该值的行。所以结果应该是这样的:
result<- data.frame("NearNeigh" = c("Chicago", "Atl", "Atl", "Chic"), "Dist" =c(713, 587, 1936, 587), row.names = c("New York","Chicago", "Los Angeles", "Atlanta"))
我已经能够通过这样的事情找到最近的邻居,但我担心我走错了路:
l1<- apply(distdf, 2, which.min)
l1df<- as.data.frame(l1)
l1
给出每列中最小值的索引。要获得最小值,请使用min
.
您可以将最终数据帧创建为。:
l1 <- apply(distdf, 2, which.min)
l2 <- apply(distdf, 2, min)
result <- data.frame(City = names(distdf),
NearNeigh = rownames(distdf)[l1],
Dist = l2, row.names = NULL)
result
# City NearNeigh Dist
#1 New.York Chicago 713
#2 Chicago Atlanta 587
#3 Los.Angeles Chicago 1745
#4 Atlanta Chicago 587
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句