我在 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/