r - 考虑时间序列数据中的零
问题描述
嗨,我正在将我当前的数据集转换为时间序列,方法是将其划分为周数并每周计数。目前,例如,计数为零的几周在数据集中被省略。下面是示例数据集。我也想包括计数为零的所有星期。我如何使用 dplyr 对其进行转换。
2013-10-6 1
2014-08-03 1
2014-10-12 1
解决方案
1) dplyr假设输入DF
在最后的注释中以可重复的方式显示,右连接DF
到几周的数据框,然后将 NA 值替换为零。在最后注释中的数据框中value
是整数,但如果它在您的应用程序中是双倍的,则使用 0 代替 0L。
library(dplyr)
DF %>%
right_join(data.frame(date = seq(first(.$date), last(.$date), 7))) %>%
mutate(value = coalesce(value, 0L))
2) zoo由于这是一个时间序列,因此可以通过使用时间序列表示来简化许多计算。转换为 zoo 对象z
,我们可以使用这种从 zoo 转换为 ts 并返回的单线,它具有插入 NA 值的效果。由于 ts 类不能直接表示日期,我们使用聚合转换回日期,然后使用 na.fill 将 NA 替换为 0。
library(zoo)
z <- read.zoo(DF, frequency = 7)
na.fill(aggregate(as.zoo(as.ts(z)), as.Date, c), 0)
这也可以写成:
library(magrittr)
z %>% as.ts %>% as.zoo %>% aggregate(as.Date, c) %>% na.fill(0)
笔记
Lines <- "2013-10-6 1
2014-08-03 1
2014-10-12 1"
DF <- read.table(text = Lines, col.names = c("date", "value"))
DF$date <- as.Date(DF$date)
推荐阅读
- javascript - Javascript 在右键单击时切换默认和自定义上下文菜单
- angular - 想要使用自定义颜色为每个系列赋予不同的条形颜色
- ab-initio - 在 Abinitio 中声明日期向量
- javascript - 将 html 文本作为附件发送到 sendgrid
- python - 是否有一种自动方法可以从许多表中删除与给定条件匹配的许多行?
- dictionary - Elixir:重命名字典中的键
- debugging - 如果条件命中两次,则在下面的 rust 代码中
- angular - angular-slickgrid 分组时隐藏总行数
- powershell - 通过 Invoke-Command 调用命令时 PowerShell 不一致
- angular - Angular - 模板仅显示属性时更新,但如果其中有函数则不更新