在R中计算UTM动物运动数据的每日缩放移动距离。

问题描述 投票:0回答:1

我正试图计算数据集中每个人每天走过的距离。我收集了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")

什么是最直接的方法来测量R中每个人的所有位置固定点之间的每日缩放旅行距离?所有的点的顺序都是正确的,但有一些日期缺失,因为这是无线电遥测数据,因此不可能跟踪每一天。我已经找到了类似的问题来解决这个问题,但没有一个专门处理我的数据格式类型。

如果能得到关于执行此操作的代码的建议,我将非常感激,因为我对R相当陌生。

r datetime dplyr distance utm
1个回答
0
投票

这里有一个解决方案,有一个可重现的例子,使用的是Dr. 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),
  )

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

© www.soinside.com 2019 - 2024. All rights reserved.