Расчет ежедневного масштабированного расстояния перемещения для данных перемещения животных UTM в R - PullRequest
1 голос
/ 22 апреля 2020

Я пытаюсь рассчитать ежедневное расстояние, пройденное каждым человеком в моем наборе данных. Я собрал данные отслеживания в формате 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? Все точки расположены в правильном порядке, но некоторые данные отсутствуют, так как это данные радиотелеметрии, поэтому отслеживать каждый день было невозможно. Я нашел похожие вопросы, которые касаются этой темы c, но ни один из них, касающийся конкретно моего типа формата данных.

Советы по коду для выполнения этого были бы весьма полезны, так как я довольно плохо знаком с R.

1 Ответ

0 голосов
/ 23 апреля 2020

Вот решение с воспроизводимым примером с использованием пакета 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 в таблице атрибутов для расстояния между последовательными точками (в последовательных строках).

...