将每月数据系列扩展到R中的每周数据系列

时间:2017-03-28 10:28:04

标签: r date

我有一个monhtly数据系列,并希望使用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)。

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

1 个答案:

答案 0 :(得分: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))

enter image description here

需要稍微调整才能完全按照您的意愿获得。例如,在这种情况下,第一天是星期五,所以星期五开始。一点点修剪会改变到星期一,星期天或其他什么。 merge命令中的+15位只是为了确保最终值(4)被转移到每周数据。