r - 填补 xts 中日期之间的空白
问题描述
所以我有一个非常基本的问题。假设我们在时间序列对象中有一些日期间隔,我想用任意值填充这些间隔。例如,假设我们有:
i <- c(seq.Date(from = as.Date("2015-01-01", format = "%Y-%m-%d"), to = as.Date("2016-01-01", format = "%Y-%m-%d"), by = "month"),
seq.Date(from = as.Date("2017-01-01", format = "%Y-%m-%d"), to = as.Date("2018-01-01", format = "%Y-%m-%d"),by = "month"))
ts <- xts(rep(0,length(i)), order.by = i)
[,1]
2015-01-01 0
2015-02-01 0
2015-03-01 0
2015-04-01 0
2015-05-01 0
2015-06-01 0
2015-07-01 0
2015-08-01 0
2015-09-01 0
2015-10-01 0
2015-11-01 0
2015-12-01 0
2016-01-01 0
2017-01-01 0
2017-02-01 0
2017-03-01 0
2017-04-01 0
2017-05-01 0
2017-06-01 0
2017-07-01 0
2017-08-01 0
2017-09-01 0
2017-10-01 0
2017-11-01 0
2017-12-01 0
2018-01-01 0
我希望实现的是“填充”ts
两个任意日期之间所有月份的时间序列start.date
,end.date
即1
. 有什么建议么?
我的尝试:
if(index(ts)[1] > start.date){
len.aux <- length(seq(from = start.date, to = index(ts)[1] %m-% months(1), by = "month"))
ts <- c(xts(rep(1, len.aux), order.by = seq.Date(from = start.date, to = index(ts)[1] %m-% months(1), by = "month")), ts)
}
if(index(ts)[length(ts)] < end.date){
len.aux <- length(seq(from = index(ts)[length(ts)] %m+% months(1), to = end.date, by = "month"))
ts <- c(ts, xts(rep(1, len.aux), order.by = seq.Date(from = index(ts)[length(ts)] %m+% months(1), to = end.date, by = "month")))
}
然而,这只填补了系列“尾巴”的空白,并没有填补中间的空白。
谢谢您的帮助!
请注意,这只是我的问题的一个最小工作示例
解决方案
您可以使用该tsibble
软件包:
library(tsibble)
i <- c(seq.Date(from = as.Date("2015-01-01", format = "%Y-%m-%d"), to = as.Date("2016-01-01", format = "%Y-%m-%d"), by = "month"),
seq.Date(from = as.Date("2017-01-01", format = "%Y-%m-%d"), to = as.Date("2018-01-01", format = "%Y-%m-%d"),by = "month"))
tsibble(datetime = yearmonth(i),
value = 0, index = datetime) %>%
fill_gaps(value = 1) %>%
View()
该yearmonth
功能将确保索引是每月的(默认为每日)。然后该函数fill_gaps
将包括缺失的月份,并将列中的缺失值设置value
为1
(默认为NA
)。
推荐阅读
- javascript - JS 搜索框提交未发送值 - 返回未定义或 [Object,Object]
- asp.net - 网络服务托管
- python - ValueError:在数据框中创建多个列时,要解压的值太多(预期为 4)
- firebase - 在 Firebase Functions 流程链中捕获更高层抛出的错误
- html - 悬停时的相对背景颜色
- powershell - 如果 URI 包含 URL 编码值,则使用 Powershell Invoke-RestMethod 的 Team City 构建步骤将失败
- visual-studio-code - 如何在 VS Code 中隐藏一个未知菜单?
- android - 如何在 AAR 中引用 SO 文件?
- php - 如何使用 Laravel 工厂上的其他状态创建“别名”数据库状态?
- ios - 是否有可能专注于选定的 SCNNode