Как отслеживать, где находится разделение в моем фрейме данных? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть некоторые данные GPS для отслеживания животных, которые имеют идентификаторы и отметки времени.

# prep the data
ID = c(rep("A",5), rep("B",5))
DateTime = c("2014-09-25 08:39:45", "2014-09-25 08:39:48", "2014-09-25 08:40:44", "2014-09-25 09:04:00","2014-09-25 09:04:10", "2014-09-25 08:33:32", "2014-09-25 08:34:41", "2014-09-25 08:35:24", "2014-09-25 09:04:00", "2014-09-25 09:04:09")
speed = c(1:10)
df = data.frame(ID,DateTime,speed, stringsAsFactors = FALSE)
df$DateTime<-as.POSIXct(df$DateTime, tz = "UTC")

Я могу разделить данные, если между перемещениями будет большой временной промежуток (например, GPS-приемник некоторое время отключался).

library(dplyr)
df %>%
  group_by(ID) %>%
  mutate(timeDiff = c(NA, difftime(tail(DateTime, -1), head(DateTime, -1), units="sec"))) %>%
  mutate(newID = paste0(ID, cumsum(!is.na(timeDiff) & timeDiff > 100))) %>%
  ungroup()

Это дает мне следующий вывод:



# A tibble: 10 × 5
#       ID            DateTime speed timeDiff newID
#    <chr>              <dttm> <int>    <dbl> <chr>
# 1      A 2014-09-25 08:39:45     1       NA    A0
# 2      A 2014-09-25 08:39:48     2        3    A0
# 3      A 2014-09-25 08:40:44     3       56    A0
# 4      A 2014-09-25 09:04:00     4     1396    A1
# 5      A 2014-09-25 09:04:10     5       10    A1
# 6      B 2014-09-25 08:33:32     6       NA    B0
# 7      B 2014-09-25 08:34:41     7       69    B0
# 8      B 2014-09-25 08:35:24     8       43    B0
# 9      B 2014-09-25 09:04:00     9     1716    B1
# 10     B 2014-09-25 09:04:09    10        9    B1

Но я бы хотел поместить разделитель между именами оригинальных идентификаторов и новым идентификатором, который добавляется, когда ониразделить. Так что я бы в итоге получил A_0, A_0, A_0, A_1 и т. Д.

Как я могу это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...