Как вы согласовываете данные времени и даты по нескольким предметам в R

Я пытаюсь масштабировать данные по нескольким предметам в одну и ту же шкалу времени. Текущие файлы данных содержат данные за 3 месяца по каждому предмету, но отметки времени для каждого события для каждого предмета отражают разные даты начала и окончания.

df$ID <- c(1, 1, 1, 1, 1, 2, 2, 2, 2)
df$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)
df$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)
df$widgets <-(4, 6, 9, 18, 3, 3, 7, 9, 12)

Я хочу изменить df, чтобы иметь общую шкалу времени, чтобы у меня был индекс даты, который позволяет мне сохранять тот же формат, что и ниже:

df$ScaleDate <- c(1,1,1,2,2,1,1,2,4) #time scale is within-ID

person Tom    schedule 24.02.2019    source источник


Ответы (1)


Во-первых, для справки, вот данные, которые я использовал:

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 и преобразуем его в число, чтобы получить индексы.

person csgroen    schedule 24.02.2019