Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中计算UTM动物运动数据的每日标度行程距离_R_Datetime_Dplyr_Distance_Utm - Fatal编程技术网

在R中计算UTM动物运动数据的每日标度行程距离

在R中计算UTM动物运动数据的每日标度行程距离,r,datetime,dplyr,distance,utm,R,Datetime,Dplyr,Distance,Utm,我试图计算数据集中每个人每天行驶的距离。我收集了UTM格式的跟踪数据,每个人每天跟踪一次。我已经按照以下方式对数据进行了子集划分,因为我一直在使用它进行其他分析: iguana.data <- read.csv(file='iguanas1-22.csv') iguana.data names(iguana.data) summary(iguana.data) #my data is in this format before subsetting animal d

我试图计算数据集中每个人每天行驶的距离。我收集了UTM格式的跟踪数据,每个人每天跟踪一次。我已经按照以下方式对数据进行了子集划分,因为我一直在使用它进行其他分析:

iguana.data <- read.csv(file='iguanas1-22.csv')
iguana.data
names(iguana.data)
summary(iguana.data)

#my data is in this format before subsetting
animal            datetime      x       y        species country UTMzone
1    IG001 2019-03-19 14:45:00 291671 1977162 Cyclura collei Jamaica     18N
2    IG001 2019-03-20 14:10:00 291670 1977157 Cyclura collei Jamaica     18N
3    IG001 2019-03-21 11:23:00 291670 1977157 Cyclura collei Jamaica     18N
4    IG001 2019-03-22 12:04:00 291670 1977157 Cyclura collei Jamaica     18N
5    IG001 2019-03-23 12:54:00 291671 1977162 Cyclura collei Jamaica     18N

animal.clean <- iguana.data %>%
  dplyr::select(animal, x, y, datetime)

head(animal.clean)
tail(animal.clean,10)

>
animal      x       y            datetime
1  IG001 291671 1977162 2019-03-19 14:45:00
2  IG001 291670 1977157 2019-03-20 14:10:00
3  IG001 291670 1977157 2019-03-21 11:23:00
4  IG001 291670 1977157 2019-03-22 12:04:00
5  IG001 291671 1977162 2019-03-23 12:54:00
6  IG001 291671 1977162 2019-03-24 12:40:00

animal      x       y            datetime
1602 IG0022 291693 1977345 2019-07-05 10:01:00
1603 IG0022 291693 1977345 2019-07-06 09:45:00
1604 IG0022 291693 1977345 2019-07-07 10:17:00
1605 IG0022 291693 1977345 2019-07-08 08:21:00
1606 IG0022 291693 1977345 2019-07-09 08:03:00
1607 IG0022 291693 1977345 2019-07-10 10:34:00
1608 IG0022 291693 1977345 2019-07-11 11:00:00
1609 IG0022 291693 1977345 2019-07-12 10:32:00
1610 IG0022 291693 1977345 2019-07-13 09:21:00
1611 IG0022 291693 1977345 2019-07-14 09:45:00

animal.clean$datetime <- as.POSIXct(animal.clean$datetime,
                                    format = "%Y-%m-%d %H:%M:%S", 
                                    tz = "America/Jamaica")

iguana.data
动物x y日期时间
1 IG001 2916711977162 2019-03-19 14:45:00
2 IG001 291670 1977157 2019-03-20 14:10:00
3 IG001 291670 1977157 2019-03-21 11:23:00
4 IG001 291670 1977157 2019-03-22 12:04:00
5 IG001 291671 1977162 2019-03-23 12:54:00
6 IG001 291671 1977162 2019-03-24 12:40:00
动物x y日期时间
1602 IG0022916931977345 2019-07-05 10:01:00
1603 IG0022916931977345 2019-07-06 09:45:00
1604 IG0022916931977345 2019-07-07 10:17:00
1605 IG0022916931977345 2019-07-08 08:21:00
1606 IG0022916931977345 2019-07-09 08:03:00
1607 IG0022916931977345 2019-07-10 10:34:00
1608 IG0022916931977345 2019-07-11 11:00:00
1609 IG0022916931977345 2019-07-12 10:32:00
1610 IG0022916931977345 2019-07-1309:21:00
1611IG0022916931977345 2019-07-1409:45:00

animal.clean$datetime这是一个使用
sf
包的可复制示例的解决方案。请务必查看示例数据集(
?meuse
),并注意我按泛洪频率类别(ffreq)对点属性进行了分组。你可以用动物ID做类似的事情

#load sf package
library(sf)
data('meuse', package = "sp")

#mconvert to a spatial object
ms <- st_as_sf(
  meuse, 
  coords = c('x', 'y'),
  crs = "+init=epsg:28992"
)

class(ms)

#plot the data by flood frequency class
plot(ms["ffreq"])

#calculate pairwise distance 
ms %>%
  group_by(ffreq) %>%
  mutate(
    lead = geometry[row_number() + 1],
    dist = st_distance(geometry, lead, by_element = T),
  )
#加载sf包
图书馆(sf)
数据('meuse',package=“sp”)
#mconvert到空间对象
ms%
分组依据(ffreq)%>%
变异(
铅=几何体[行号()+1],
距离=st_距离(几何、引线、按元素=T),
)

查看属性表中的dist属性,了解连续点之间的距离(在连续行中)。

我使用包{amt}中的step_length函数获得了相同的结果。在这里,您必须首先使用make_track函数创建一个轨迹。之后,您可以使用步长函数。在我的例子中,结果是相同的。

您可能想看看rgeos包和gDistance函数来计算给定点之间的距离。谢谢,您能给我一些建议,告诉我如何在代码中实现这一点吗?我曾尝试使用gDistance函数,但它对我不起作用。仔细想想,
sf
rgeos
更好;请看下面我的答案。这非常有效,非常感谢蒂姆。正如您所建议的,我按动物id对点属性进行了分组,结果非常理想。我假定dist属性中的值默认以米为单位?很高兴它起作用了。我认为距离单位应该与投影单位相同。为了安全起见,我会对数据子集进行测试,并在GIS中进行验证。