Во-первых, для справки, вот данные, которые я использовал:
df <- data.frame(ID = c(1, 1, 1, 1, 1, 2, 2, 2, 2),
Time = c("2:34:00", "2:55:13", "5:23:23", "7:23:04", "9:18:18", "3:22:12", "4:23:02", "5:23:22", "9:30:02"),
Date = c("7/13/16", "7/13/16", "7/13/16", "7/14/16", "7/14/16", "1/02/14", "1/02/14", "1/03/14", "1/05/14"),
widgets = c(4, 6, 9, 18, 3, 3, 7, 9, 12))
Мы можем использовать используемый синтаксис dplyr
(не обязательно, но выглядит очень разборчиво и просто) с функциями lubridate
и выполнить этооперация очень проста:
library(dplyr)
library(lubridate)
df %>%
mutate(Date = mdy(Date)) %>%
group_by(ID) %>%
mutate(ScaleDate = as.numeric((Date - Date[1]) + 1))
mdy
преобразует значения в объекты Date.Затем мы можем сделать операции с ними.Если даты совпадают, это приведет к «0 дням».Следовательно, мы добавляем 1 и преобразуем его в числовое значение, чтобы получить индексы.