【发布时间】:2018-04-11 04:53:04
【问题描述】:
我有以下示例:
Id = c(1, 1,3,3,3)
long = c("60.466681", "60.664116", "60.766690", "60.86879", "60.986569" )
lat = c("24.158253", "24.266036", "24.368283", "24.479058", "24.5599858")
data = data.frame(Id, long, lat)
data$long <- as.numeric(as.character(data$long))
data$lat <- as.numeric(as.character(data$lat))
data$Id <- as.factor(data$Id)
我想创建一个名为distance 的新列,它是因子Id 的每个级别的每个纬度/经度点之间的距离的累积总和
我尝试使用在 Internet 上找到的内容并使用包 geosphere 中的 distCosine() 创建自己的函数。我终于明白了:
创建函数
distance <- Vectorize(function(i, j) distCosine(data[i,], data[j,]))
运行函数
library(dplyr)
Dist <- data %>%
filter(Id != 0) %>% #I keep this because in my final data I can have Id==0
group_by(Id) %>%
do(distance(.$lat, .$long))
看来函数不工作了,估计是循环到下一行有问题。
可能出了什么问题?
【问题讨论】:
-
在函数 distCosine 的 documentation 中,它说 p1 和 p2 “可以是两个数字的向量、2 列的矩阵(第一列是经度,第二列是纬度)或 SpatialPoints * 目的”。您改为提供两个坐标向量。此外,使用 dplyr,您可以在修复函数后执行:
Dist <- data %>% filter(Id != 0) %>% group_by(Id) %>% summarize(dist = distance(lat,long))。 -
谢谢@shreyasgm。这是我所做的:函数现在是
distance <- Vectorize(function(i, j) distCosine(data[i,c("lat", "long")], data[j,c("lat", "long")])),最后一行plyr是Dist <- data %>% filter(Id != 0) %>% group_by(Id) %>% summarize(dist = distance(lat,long))。 ` 位我有错误Error: expecting a single value Error during wrapup: cannot open the connection