r - 插入/扩展季度到月度系列

标签 r datetime merge interpolation

我有一个包含季度观察结果的 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

最佳答案

我不太清楚您对不需要的列格式的评论,但是如果您尝试使用三次插值来获取插值,您可能会考虑类似下面的代码

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。

关于r - 插入/扩展季度到月度系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25062408/

相关文章:

R解决:system is exactly singular

javascript - 使用时间作为 css 背景色

python - 将两个时间表与一些省略的数据合并

python - 使用 Pandas 在合并期间计算

mysql - 合并 2 个表和 GROUP BY 日期

regex - Word 不以数字或星号和数字开头(正则表达式)

r - 如何从字符对象创建字符向量?

r - 如何在后视中使用交替

sql - 仅将带有年份和月份的字符串...转换为仅限年份和月份的日期格式

python - 将年和月列与 Pandas 干净地组合到单个日期列