我有以下数据集:
user1
latitude longitude utc_timestamp
1 18.12495 -67.08680 1504227574
2 18.12495 -67.08680 1504231174
3 18.12495 -67.08680 1504234775
4 18.12495 -67.08680 1504238376
5 18.12495 -67.08680 1504242642
6 18.12495 -67.08680 1504247305
7 18.12497 -67.08683 1504251880
8 18.12495 -67.08680 1504255783
9 18.10904 -67.06777 1504271521
10 18.12547 -67.08758 1504281423
11 18.12495 -67.08680 1504285025
12 18.12495 -67.08680 1504289327
13 18.12495 -67.08680 1504293647
14 18.12470 -67.08648 1504299483
并且我创建了一个函数来评估每对行以检测停留点。
StayPoint_Detection <- function(file, distThres = 200, timeThres = 30*60) {
SP <- data.frame(longitude=double(),
latitude = double(),
arvT = integer(),
levT = integer(),
stringsAsFactors = FALSE)
pointNum <- nrow(file)
i = 1
while (i < pointNum-1) {
j <- i + 1
while (j < pointNum) {
dist <- getDistance(file[i,"longitude"], file[i, "latitude"],
file[j,"longitude"], file[j, "latitude"])
if (dist > distThres) {
ti <- file[i,"utc_timestamp"]
tj <- file[j, "utc_timestamp"]
deltaT <- tj - ti
if (deltaT > timeThres) {
Scoords <- computMeanCoord(file[i:j,c("latitude", "longitude")])
SP <- rbind(SP, setNames(as.list(c(Scoords[2], Scoords[1],
ti, tj)),
names(SP)))
}
break
}
else
j <- j + 1
}
i <- j
}
return(SP)
}
我遇到的问题是该函数未评估每一对。在我显示的数据集中,我手动评估了每一对,而第8-9和9-10行是具有停留点的行,相反,我得到了以下结果:
SP1
longitude latitude arvT levT
1 18.12318 -67.08469 1504227574 1504271521
2 18.11726 -67.07767 1504271521 1504281423
第二行对9-10的结果正确,但是第一行是不正确的,因为该函数在应计算8-9的情况下对1-9行进行了计算。我对循环不是很好,我想知道我可能做错了什么。同样,我想评估每对行。谢谢!