【问题标题】:Extend monthly data series to weekly data series in R将每月数据系列扩展到 R 中的每周数据系列
【发布时间】:2017-03-28 10:28:03
【问题描述】:

我有一个月度数据系列,并希望使用 R 将其扩展为每周系列。

我已经创建了一个空的每周数据框,并将其与具有每月数据的时间序列合并。然后我使用了na.locf 函数,它将所有NA 值替换为它之前的值。

weekly.data <- merge(monthlyTS, enmptyweekly)

weekly.data <- na.locf(weekly.data)

这很好用。但是,有些周属于两个月:例如从2010-09-28 开始的一周。本周,我不想要 9 月的值,而是 9 月和 10 月的加权平均值 (3/7*Septvalue + 4/7*Octvalue)。

有公式可以得到这个结果吗?

【问题讨论】:

  • 那么,成功了吗?
  • 成功了,非常感谢:)
  • 很高兴听到。当一个答案满足问题的要求,或者是一系列答案中最有帮助的,习惯上mark it as 'accepted'。这是通过单击相关答案左上角向下箭头正下方的复选标记来完成的。

标签: r date


【解决方案1】:

我的直接想法是将其扩展到每日,然后从那里获取每周平均值。它似乎有效,但可能有更简单/更快的解决方案。

library(zoo)
par(mar=c(2, 2, 2, 1), mgp=c(3, 0.6, 0), mfrow=c(3, 1), cex=0.8)

mo <- seq(as.Date(1), as.Date(100), by="month")
zoo.mo <- zoo(seq_along(mo), mo)
plot(zoo.mo, type="b", pch=16, cex=0.5, main="monthly data")

zoo.da <- merge(zoo.mo, zoo(, seq(start(zoo.mo), end(zoo.mo)+15, by="day")))
zoo.da <- na.locf(zoo.da)
plot(zoo.da, type="b", pch=16, cex=0.5, main="daily data, constant interpolation")

zoo.we <- rollapply(zoo.da, 7, mean, by=7)
plot(zoo.we, type="b", pch=16, cex=0.5, main="weekly average")

weekdays(start(zoo.da))

需要稍作调整才能完全符合您的要求。例如,在这种情况下,第一天是星期五,因此一周从星期五开始。稍微修剪一下就会将其更改为星期一、星期日或其他任何时间。合并命令中的 +15 位只是为了确保最终值 (4) 被转移到每周数据中。

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2023-03-08
    • 2013-05-02
    • 2021-08-27
    • 2021-04-25
    相关资源
    最近更新 更多