R 计算动物每日最大位移

R 计算动物每日最大位移,r,gps,R,Gps,我是个新手,需要一些帮助。 我有以下列的动物移动数据:“TagID”、“Date”、“location.long”、“location.lat” 我需要分别为每天和每个人找到连续GPS点之间的距离。在那之后,我试图找到那天的最大位移,也就是说当天的第一个点和同一天动物最远点之间的距离 以下是数据结构: TagID Date location.long location.lat 1 6634 2018-10-22 10.311283 48.20341 2

我是个新手,需要一些帮助。 我有以下列的动物移动数据:“
TagID
”、“
Date
”、“
location.long
”、“
location.lat

我需要分别为每天和每个人找到连续GPS点之间的距离。在那之后,我试图找到那天的最大位移,也就是说当天的第一个点和同一天动物最远点之间的距离

以下是数据结构:

    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])

mydata我将以以下方式处理此问题。首先,我将创建一个函数,该函数将接收data.frame并返回您所追求的距离(到目前为止的距离)。然后,我将日期转换为Y-m-d格式(放弃时间)。然后,我将按TagID和这个新日期分割数据。这样,每个区块都会有您想要的TagID day子集。将上述函数应用于此子集,就完成了。您可以使用函数
split
lappy
(或
sapply
,如果您觉得有胆量:)。请注意,有大量的包处理(动物)移动。请参见,和例如。祝你好运你也可以考虑提供足够复杂的玩具数据——因为你想计算每一天和每一天的运动,如果你对两个动物每天有3-4个位置,那就太好了。干杯。@RomanLuštrik谢谢你的提示!lapply似乎是一个非常有用的函数。@RomanLuštrik I按照您的建议转换了日期格式。然后按TagID和Date分割数据,并尝试计算块中各点之间的距离。这似乎是工作和矩阵与每个点之间的距离是正确创建的。然而,当我试图获得最大位移时,它会为每三组返回相同的值。我做错了什么?我在问题中添加了我作为编辑编写的脚本
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=",")