r - 滞后值与日期

标签 r data.table lag

我正在研究产品的价格。我每天都有随机丢失一些信息的数据。

在此处查看缺少 1 月 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.framedplyrtidyverse 如果需要

最佳答案

您可以添加一个ifelse 语句来检查连续的天数

mockData[, lag_price := ifelse(timeStamp - shift(timeStamp) == 1, shift(price), NA)]
#    timeStamp price lag_price
#1: 2018-01-01    10        NA
#2: 2018-01-02    15        10
#3: 2018-01-03    12        15
#4: 2018-01-05    11        NA

关于r - 滞后值与日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54974770/

相关文章:

mysql - MySQL 服务器的高 CPU 使用率

r - 将矩阵的每一行与另一个矩阵中的同一行进行交互

r - 改进 data.table 的聚合

R组数据的滚动平均值.table

python - pyautogui.press() 在调用时导致延迟

java - Android Studio 游戏在新设备上运行速度较慢,在旧设备上运行速度较快

r - 使用 %>% 动态指定因子水平

R:计算面板数据中的 5 年平均值

R,ubuntu : months function translates months in Spanish

R 对行子集的组执行计算