我有一个包含季度观察的data.frame。我现在想插入月值(首选立方,线性很好)。中间目标应该是创建一个以DATE
为索引的data.frame,以及所有月度观察的缺失值。
谷歌搜索显示我应该为整个时间范围创建一个空的data.frame然后合并它 - 但是到目前为止我尝试过的东西给了我错误。这是我的程序;但由于我是r
的新手,我愿意接受任何改变建议。
> str(ger)
'data.frame': 93 obs. of 2 variables:
$ DATE : Date, format: "1991-01-01" "1991-04-01" "1991-07-01" "1991-10-01" ...
$ VALUE: num 470780 468834 466332 472949 480359 ...
> head(ger)
DATE VALUE
1 1991-01-01 470780.3
2 1991-04-01 468834.0
3 1991-07-01 466331.6
4 1991-10-01 472949.0
5 1992-01-01 480359.2
6 1992-04-01 476744.5
emptyIndex <- seq(ger[1, 'DATE'], tail(ger[, 'DATE'], 1), by='1 month')
gerMonthly <- data.frame(DATE = emptyIndex, VALUE = NA)
merge(ger, gerMonthly, by='DATE', all.y = T)
这是我最接近的,但它给了我一种不受欢迎的列格式 - 肯定有一种更清洁的方式来获得我想要的东西?最后,给定格式,获得插值时间序列的最简洁方法是什么?
DATE VALUE.x VALUE.y
1 1991-01-01 470780.3 NA
2 1991-02-01 NA NA
3 1991-03-01 NA NA
4 1991-04-01 468834.0 NA
5 1991-05-01 NA NA
6 1991-06-01 NA NA
答案 0 :(得分:3)
我对你对不受欢迎的列格式的评论不是很清楚,但是如果你试图使用三次插值来获取插值,你可能会考虑类似下面的代码
ger <- data.frame(DATE= as.Date(c("1991-01-01", "1991-04-01", "1991-07-01", "1991-10-01", "1992-01-01" )),
+ VALUE= c(470780, 468834, 466332, 472949, 480359))
DateSeq <- seq(ger$DATE[1],tail(ger$DATE,1),by="1 month")
gerMonthly <- data.frame(DATE=DateSeq, Interp.Value=spline(ger, method="natural", xout=DateSeq)$y)
merge(ger, gerMonthly, by='DATE', all.y = T)
DATE列需要采用日期格式,因此插值可以使用数值。 我通常使用“自然”三次样条,但也有其他选项。 此格式显示输入值和结果,以便您可以检查插值是否合理,但如果您只想要插值结果,则可以使用gerMonthly。