我有一个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
)。
是否有公式可以得到这个结果?
答案 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))
需要稍微调整才能完全按照您的意愿获得。例如,在这种情况下,第一天是星期五,所以星期五开始。一点点修剪会改变到星期一,星期天或其他什么。 merge命令中的+15位只是为了确保最终值(4)被转移到每周数据。