Я новичок в R и мне нужна помощь.
У меня есть данные о перемещении животных со следующими столбцами: "TagID
", "Date
", "location.long
", "location.lat
"
Мне нужно найти расстояние между последовательными точками GPS отдельно для каждого дня и для каждого отдельного . После этого я пытаюсь найти максимальное смещение t для этого дня, которое означает расстояние между первой точкой дня и самой дальней точкой этого животного в тот же день.
Вот структура данных :
TagID Date location.long location.lat
1 6634 2018-10-22 10.311283 48.20341
2 6634 2018-10-22 10.319261 48.18381
3 6634 2018-10-22 10.321538 48.15845
4 6634 2018-10-22 10.293819 48.15497
5 6634 2018-10-22 10.369189 48.12718
6 6634 2018-10-22 10.333642 48.14402
7 6634 2018-10-23 10.256952 48.12419
8 6634 2018-10-23 10.283222 48.11557
9 6634 2018-10-23 10.264805 48.10601
10 6634 2018-10-23 10.358082 48.07012
11 6634 2018-10-23 10.310423 48.03421
12 6678 2018-10-22 9.981601 48.24799
13 6678 2018-10-22 9.999586 48.22714
14 6678 2018-10-22 9.963930 48.29394
15 6678 2018-10-22 9.989562 48.17918
До сих пор я достиг этой точки:
mydata <- read.csv("tracking.csv")
onlcoor <- subset (mydata, select = c("location.long","location.lat"))
m <- as.matrix(onlcoor)
#Creates a matrix witht the distances between each point in the dataset
mydata$dist <- distm(m, fun=distVincentyEllipsoid)
#Returns the maximum distance between the first point the farthest from it
mydata$displacement <- max(mydata$dist[,1])
Он вычисляет расстояние между последовательными точками и возвращает смещение (расстояние между первой и самой дальней точками от него).
Теперь я хотел бы добавить два условия в код
- TagID не считается. Следовательно, расстояние для последнего местоположения животного будет сгенерировано с использованием первого местоположения нового животного, когда расстояние должно быть NA.
- Дата также должна быть принята во внимание, потому что мне нужно максимальное суточное смещение каждого человека
Вот код, который наконец-то сработал для меня:
mydata <- read.csv("tracking.csv")
mydata <- split(mydata, list(mydata$TagID, mydata$Date), drop = TRUE)
displacem <- sapply(mydata, function(mydata){
onlcoor <- subset (mydata, select =
c("location.long","location.lat"))
m <- as.matrix(onlcoor)
mydata$dist <- distm(m, fun=distVincentyEllipsoid)
mydata$displ <- max(mydata$dist[,1])
})
write.table(displacem, file = "maximum_displacement.csv",row.names=FALSE,
na="",col.names=FALSE, sep=",")