У меня есть некоторые данные 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 и т. Д.
Как я могу это сделать?