У меня есть фрейм данных временного ряда (см. Воспроизводимый фрейм данных ниже), где я хочу создать новые столбцы значений отстающих переменных в рабочие дни t-1 и t-2. Все наблюдения являются рабочими днями. Таблица данных организована в соответствии с первой переменной / столбцом, который указывает и форматируется как дата в соответствии с «% Y-% m-% d». Проблема заключается в том, что иногда возникают временные промежутки, когда в кадре данных отсутствует один или несколько рабочих дней, что означает, что при создании переменных с запаздыванием в некоторых случаях это может привести к неправильным значениям с запаздыванием, основанным на предыдущих наблюдениях, когда на самом деле NA уточняется, поскольку рабочий день t-1 или t-2 отсутствует. Таким образом, мой вопрос заключается в том, существует ли какой-нибудь разумный способ создания лаговых переменных, позволяющий избежать этой проблемы?
Ниже я привел воспроизводимый кадр данных в качестве примера:
set.seed(1)
Data <- data.frame( date = as.Date(c("2019-06-24", "2019-06-25","2019-06-27", "2019-06-28","2019-07-01", "2019-07-03", "2019-07-04", "2019-07-08", "2019-07-09","2019-07-10")),
X = sample(1:10),
Y = sample(1:10),
Z = sample(c("YES", "NO"), 10, replace = TRUE))
Как вы можете заметить, я намеренно пропустил несколько рабочих дней. И, если вы запустите следующий код, который традиционно создает лаговые переменные, вы можете заметить, что вывод будет неточным.
install.packages(data.table)
library(data.table)
setDT(Data)[, paste0('X', 1:2) := shift(X, 1:2)][]
setDT(Data)[, paste0('Y', 1:2) := shift(Y, 1:2)][]
setDT(Data)[, paste0('Z', 1:2) := shift(Z, 1:2)][]
например. на дату 2019-06-27 желаемым выходом для запаздывающих переменных «X1» и «X2» будет «NA», поскольку дата 2019-06-26 отсутствует.