数据如下所示:
ID Lat Long Time
1 3 3 00:01
1 3 4 00:02
1 4 4 00:03
2 4 3 00:01
2 4 4 00:02
2 4 5 00:03
3 5 2 00:01
3 5 3 00:02
3 5 4 00:03
4 9 9 00:01
4 9 8 00:02
4 8 8 00:03
5 7 8 00:01
5 8 8 00:02
5 8 9 00:03
我想测量每个给定时间间隔内给定半径内ID彼此远离的距离。我在1657个时间间隔内以1057 ID执行此操作,因此效率非常重要。
测量半径内点之间的距离很重要,因为如果点太远,我就不在乎。我正在尝试测量相对接近的点之间的距离。例如,我不在乎ID 1距离ID 5有多远,但我关心的是ID 4与ID 5的距离。
我正在使用R和sp包。
答案 0 :(得分:0)
对于我所看到的,会有多次重复的值。因此,我建议只计算一对坐标的距离(即使在df中重复多次)作为起点。您可以过滤数据并合并表。 (我会把它添加为评论,但我还没有声名鹊起)。
第一行是:
#Creating a DF with no repeated coordinates
df2 <- df %>% group_by(Lat,Long) %>% summarise()
# Calculating Distances
Dist <- distm(cbind(df2$Long,df2$Lat))
答案 1 :(得分:0)
使用for循环和nn2最近邻函数求解:
df$withinradius <- vector(length = dim(df)[1])
for (i in 1:dim(df)[1]){
interact <- ifelse(sum(
as.data.frame(
nn2(
df[i,c(3,2)],
query = df[
which(df[i,4] == df$Time &
eligible.df[i,1] != df$ID),c(3,2)
],
searchtype = 'radius', radius = 1))[1]) >= 1,
'01: One or More Within Radius',
'02: Zero Within Radius')
df[i,5] <- interact
}