【问题标题】:Averaging a monthly time series with incomplete observations对不完整观察的每月时间序列进行平均
【发布时间】:2021-08-12 20:26:02
【问题描述】:

我有以下数据集:

id observation_date Observation_value
1  2015-02-23       5
1  2015-02-24       6
1  2015-03-01       24
1  2015-07-16       2
1  2015-09-28       9
1  2015-12-05       12

我想创建observation_value 的每月平均值。在某个月份没有值的情况下,我想用我有数据的月份之间的平均值填写数据。

【问题讨论】:

  • 请说明您尝试了什么以及失败的地方。

标签: r database time-series


【解决方案1】:

使用最后注释中的数据——我们添加了第二个 id——转换为 zoo,使用第 1 列进行拆分,第 2 列作为 yearmon 类的索引。同样在同一个语句中,使用年/月的平均值进行聚合,给出动物园对象 z。然后转换为 ts ,它将用 NA 填充缺失的月份,然后转换回 zoo 并使用 na.approx 来填充 NA(或根据您的需要使用 na.spline 或 na.locf )。 fortify.zoo(zz) 和 fortify.zoo(zz, melt = TRUE) 可用于将动物园对象转换为数据帧。

library(zoo)
z <- read.zoo(dat, FUN = as.yearmon, index = 2, split = 1, aggregate = mean)
zz <- na.approx(as.zoo(as.ts(z)))

给予

> zz
            1    2
Feb 2015  5.5  5.5
Mar 2015 24.0 24.0
Apr 2015 18.5 18.5
May 2015 13.0 13.0
Jun 2015  7.5  7.5
Jul 2015  2.0  2.0
Aug 2015  5.5  5.5
Sep 2015  9.0  9.0
Oct 2015 10.0 10.0
Nov 2015 11.0 11.0
Dec 2015 12.0 12.0

注意

Lines <- "id observation_date Observation_value
1  2015-02-23       5
1  2015-02-24       6
1  2015-03-01       24
1  2015-07-16       2
1  2015-09-28       9
1  2015-12-05       12
2  2015-02-23       5
2  2015-02-24       6
2  2015-03-01       24
2  2015-07-16       2
2  2015-09-28       9
2  2015-12-05       12"

dat <- read.table(text = Lines, header = TRUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2018-10-15
    • 1970-01-01
    • 2019-10-13
    • 2021-01-28
    相关资源
    最近更新 更多