滞后值与日期

时间:2019-03-03 23:14:41

标签: 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合作

3 个答案:

答案 0 :(得分:5)

您可以添加一个Array ( [3] => Array ( [s2] => Array ( [0] => Array ( [sem] => s2 [year] => 3 [subjectcode] => web [subjectname] => webtechnology [internal] => 30 [external] => 65 [credits] => 3 ) [1] => Array ( [sem] => s2 [year] => 3 [subjectcode] => js654 [subjectname] => java [internal] => 25 [external] => 60 [credits] => 3 ) ) ) ) 语句以连续检查几天

ifelse

答案 1 :(得分:1)

mockData[, v := 
  data.table(timeStamp = timeStamp + 1, price)[.SD, on=.(timeStamp), x.price]
]

    timeStamp price  v
1: 2018-01-01    10 NA
2: 2018-01-02    15 10
3: 2018-01-03    12 15
4: 2018-01-05    11 NA

这使用带有(timeStamp + 1, price)的表进行更新联接。

答案 2 :(得分:0)

您可以展开日期,然后展开const styles = theme => ({ root: { width: "100%", marginTop: 0, fontSize: 8 }, table: {}, row: { border: "none", "&:nth-of-type(odd)": { backgroundColor: "red" } }, body: { fontSize: 10, border: "none" } }); 价格。在此策略中,您还可以选择在管道中引入过滤器,以取出不需要的日期。

lag