【问题标题】:Accounting for zeros in Time Series data考虑时间序列数据中的零
【发布时间】:2019-05-08 00:21:38
【问题描述】:

您好,我正在将我当前的数据集转换为时间序列,方法是将其划分为几周并计算每周的次数。目前,例如,计数为零的几周在数据集中被省略。下面是示例数据集。我也想包括计数为零的所有星期。我如何使用 dplyr 对其进行转换。

2013-10-6 1
2014-08-03 1
2014-10-12 1

【问题讨论】:

  • 一种选择是创建一个您想要包含的日期列表并将其连接回汇总数据框。
  • 在@cardinal40 评论之后,您可以生成最小和最大日期之间所有日期的序列,并对其进行外部连接。如果您想要更具体的答案,您需要提供示例数据和所需的输出。

标签: r dplyr time-series


【解决方案1】:

我们可以使用tidyr 包中的completefull_seq

library(dplyr)
library(tidyr)

dat2 <- dat %>%
  mutate(V1 = as.Date(V1)) %>%
  complete(V1 = full_seq(V1, period = 7), fill = list(V2 = 0))
dat2
# # A tibble: 54 x 2
#    V1            V2
#    <date>     <dbl>
#  1 2013-10-06     1
#  2 2013-10-13     0
#  3 2013-10-20     0
#  4 2013-10-27     0
#  5 2013-11-03     0
#  6 2013-11-10     0
#  7 2013-11-17     0
#  8 2013-11-24     0
#  9 2013-12-01     0
# 10 2013-12-08     0
# # ... with 44 more rows

数据

dat <- read.table(text = "'2013-10-6' 1
'2014-08-03' 1
                  '2014-10-12' 1",
                  header = FALSE, stringsAsFactors = FALSE)

【讨论】:

    【解决方案2】:

    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 对象z 我们可以使用这个单线从 zoo 转换为 ts 并返回,它具有插入 NA 值的效果。由于 ts 类不能直接表示日期,因此我们使用 aggregate 转换回 Date ,然后使用 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)
    

    【讨论】:

    • 谢谢你的解释:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2020-09-15
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多