r - 为缺失数据插入行并进行插值

标签 r dataframe time-series interpolation missing-data

我在 R 中有以下数据框:

        Date Accumulated
1 2016-10-01     6902000
2 2016-11-01     9033000
3 2017-06-01    15033000
4 2017-11-01    24033000
5 2019-05-01    24533000
6 2019-08-01    25033000
7 2019-11-01    27533000
8 2020-06-01    29033000

我有兴趣完成“数据”列中缺失月份的行,同时在“累积”列中应用线性或样条插值(最好是样条插值)(即,我需要 2016-12 年的行-01、2017-01-01、2017-02-01、2017-03-01 等等)。

我看到了另一个问题,人们建议使用“zoo”和“data.table”包,他们首先用“NA”创建行,然后应用插值……但我不知道该怎么做这是因为我的数据组织方式不同(我的所有日​​期数据都在一列中,与本例相反,例如:r - insert row for missing monthly data and interpolate)。然而,我对 R 还是比较陌生,管理不同类型和类别的数据对我来说非常困难。我确信有一种简单的方法可以做到这一点。

非常感谢。

最佳答案

这有助于使用样条曲线:

library(zoo)

#Data
df <- structure(list(Date = structure(c(17075, 17106, 17318, 17471, 
18017, 18109, 18201, 18414), class = "Date"), Accumulated = c(6902000L, 
9033000L, 15033000L, 24033000L, 24533000L, 25033000L, 27533000L, 
29033000L)), row.names = c("1", "2", "3", "4", "5", "6", "7", 
"8"), class = "data.frame")

#Create seq of dates
df$Date <- as.Date(df$Date)
dfm <- data.frame(Date=seq(min(df$Date),max(df$Date),by='1 month'))
#Now merge
dfmerged <- merge(dfm,df,by = 'Date',all.x=T)
#Now add interpolation
dfmerged$Interpolation <- na.spline(dfmerged$Accumulated)

它将产生:

         Date Accumulated Interpolation
1  2016-10-01     6902000       6902000
2  2016-11-01     9033000       9033000
3  2016-12-01          NA      10525685
4  2017-01-01          NA      11534406
5  2017-02-01          NA      12222432
6  2017-03-01          NA      12753035
7  2017-04-01          NA      13289484
8  2017-05-01          NA      13995049
9  2017-06-01    15033000      15033000
10 2017-07-01          NA      16511487
11 2017-08-01          NA      18318181
12 2017-09-01          NA      20285631
13 2017-10-01          NA      22246387
14 2017-11-01    24033000      24033000
15 2017-12-01          NA      25510428
16 2018-01-01          NA      26673271
17 2018-02-01          NA      27548534
18 2018-03-01          NA      28163225
19 2018-04-01          NA      28544352
20 2018-05-01          NA      28718923
21 2018-06-01          NA      28713943
22 2018-07-01          NA      28556422
23 2018-08-01          NA      28273365
24 2018-09-01          NA      27891781
25 2018-10-01          NA      27438677
26 2018-11-01          NA      26941060
27 2018-12-01          NA      26425938
28 2019-01-01          NA      25920317
29 2019-02-01          NA      25451205
30 2019-03-01          NA      25045611
31 2019-04-01          NA      24730540
32 2019-05-01    24533000      24533000
33 2019-06-01          NA      24484346
34 2019-07-01          NA      24633317
35 2019-08-01    25033000      25033000
36 2019-09-01          NA      25709290
37 2019-10-01          NA      26579313
38 2019-11-01    27533000      27533000
39 2019-12-01          NA      28465321
40 2020-01-01          NA      29291385
41 2020-02-01          NA      29931341
42 2020-03-01          NA      30305333
43 2020-04-01          NA      30333510
44 2020-05-01          NA      29936017
45 2020-06-01    29033000      29033000

关于r - 为缺失数据插入行并进行插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63182156/

相关文章:

按同名列分组的行值总和

Python & Pandas - 按天分组并计算每一天

python - 使用科学python进行时序数据分析 : continuous analysis over multiple files

r - Python中时间序列的时间分解

r - 从 R 到 Excel 表的上标?

r - 处理 geom_text 大小

r - websocket 连接不起作用

r - 如何将向量 append 到 R 中的向量列表而不诉诸索引?

python - 转置 pandas 数据框并垂直 append

python - Pandas :如何分组并计算给定列中的唯一性?