Я изучаю цену товара по времени.У меня есть ежедневные данные с некоторой случайной отсутствующей информацией.
См. Здесь минимальный пример, где отсутствует информация за 4 января:
library(lubridate)
library(data.table)
mockData <- data.table(timeStamp=c(ymd("20180101"), ymd("20180102"), ymd("20180103"), ymd("20180105")),
price=c(10,15,12,11))
Я хочу добавить отстающую цену к моейdata.table
но если предыдущий день отсутствует, я хочу NA
вместо ближайшего дня с информацией.
Я объясню себе:
Если я использую функцию shift
:
mockData[, lag_price:=shift(price,type="lag")]
Я получаю:
structure(list(timeStamp = structure(c(17532, 17533, 17534, 17536
), class = "Date"), price = c(10, 15, 12, 11), lag_price = c(NA,
10, 15, 12)), row.names = c(NA, -4L), class = c("data.table",
"data.frame"))
Но то, что я действительно хочу, это:
structure(list(timeStamp = structure(c(17532, 17533, 17534, 17536
), class = "Date"), price = c(10, 15, 12, 11), lag_price = c(NA,
10, 15, NA)), row.names = c(NA, -4L), class = c("data.table",
"data.frame"))
Мне стало удобнее, используя data.table
но я буду работать с data.frame
, dplyr
и tidyverse
, если потребуется