r - 日期的滞后值
问题描述
我一直在研究产品的价格。我有一些随机缺失的每日数据。
请参阅此处的一个最小示例,其中缺少 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.frame
,如果需要的话dplyr
tidyverse
解决方案
您可以添加一个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
推荐阅读
- python - Matplotlib - 如何向图例添加标签
- apache-spark - 当缓存(MEMORY_ONLY 持久性)数据不适合内存时,spark 如何处理内存不足错误?
- c# - Google Places API 返回邮政编码
- php - 我有一些像 220.00 这样的字符串,我从中删除了 .00
- r - 在(著名的)鸢尾花数据集上应用图聚类算法
- assembly - %rip-relative 寻址何时以及如何解决?
- python - 在 Anaconda Spyder 中出现错误“GitCommandNotFound: Cmd('git') not found due:”
- julia - 如何在 Julia 的某个文件夹中激活活动环境
- go - Golang:http2 消息头和 Json 正文分成 2 或 3 个数据包
- ios - 崩溃“AVAssetDownloadTask 不支持响应属性”