R中的时间序列数据的条件插值

R中的时间序列数据的条件插值

问题描述:

我有N/A的时间序列数据。数据将以动画散点图结尾R中的时间序列数据的条件插值

Week X Y 
1  1 105 
2  3 110 
3  5 N/A 
4  7 130 
8  15 160 
12  23 180 
16  30 N/A 
20  37 200 

对于流畅的动画,数据将通过计算的附加值/行进行补充。对于X值,这只是算术。到目前为止没有问题。

Week X Y 
1  1 105 
     2 
2  3 110 
     4 
3  5 N/A 
     6 
4  7 130 
     8 
     9 
     10 
     11 
     12 
     13 
     14 
8  15 160 
     16 
     17 
     18 
     19 
     20 
     21 
     22 
12  23 180 
     24 
     25 
     26 
     27 
     28 
     29 
16  30 N/A 
     31 
     32 
     33 
     34 
     35 
     36 
20  37 200 

的Y值应被内插并且在额外要求,即内插只应该连续两个值之间,而不是值,即在它们之间具有N/A之间出现。

Week X Value 
1  1 105 
     2 interpolated value 
2  3 110 
     4 
3  5 N/A 
     6 
4  7 130 
     8 interpolated value 
     9 interpolated value 
     10 interpolated value 
     11 interpolated value 
     12 interpolated value 
     13 interpolated value 
     14 interpolated value 
8  15 160 
     16 interpolated value 
     17 interpolated value 
     18 interpolated value 
     19 interpolated value 
     20 interpolated value 
     21 interpolated value 
     22 interpolated value 
12  23 180 
     24 
     25 
     26 
     27 
     28 
     29 
16  30 N/A 
     31 
     32 
     33 
     34 
     35 
     36 
20  37 200 

我已经有大约尝试,转换的“原始” N/A到占位符值,并与na.approx等试图动物园包,但鸵鸟政策得到它,来表达对一个正确的条件语句这种“条件近似”或“条件间隙填充”。任何提示是值得欢迎的,非常感激。

预先感谢

更换的NA用inf,内插,然后还原无限值NA。

library(zoo) 

DF2 <- DF 
DF2$Y[is.na(DF2$Y)] <- Inf 

w <- merge(DF2, data.frame(Week = min(DF2$Week):max(DF2$Week)), by = 1, all.y = TRUE) 
w$Value <- na.approx(w$Y) 
w$Value[!is.finite(Value)] <- NA 

给出以下内容,其中周已扩大到所有周,Y是使得原始的NA被示为Inf文件和插入的NA为NA。值插值Y.

> w 
    Week X Y Value 
1  1 1 105 105.0 
2  2 3 110 110.0 
3  3 5 Inf NA 
4  4 7 130 130.0 
5  5 NA NA 137.5 
6  6 NA NA 145.0 
7  7 NA NA 152.5 
8  8 15 160 160.0 
9  9 NA NA 165.0 
10 10 NA NA 170.0 
11 11 NA NA 175.0 
12 12 23 180 180.0 
13 13 NA NA NA 
14 14 NA NA NA 
15 15 NA NA NA 
16 16 30 Inf NA 
17 17 NA NA NA 
18 18 NA NA NA 
19 19 NA NA NA 
20 20 37 200 200.0 

注:输入DF在重现的形式:

Lines <- " 
Week X Y 
1  1 105 
2  3 110 
3  5 N/A 
4  7 130 
8  15 160 
12  23 180 
16  30 N/A 
20  37 200" 
DF <- read.table(text = Lines, header = TRUE, na.strings = "N/A") 
+0

工作就像一个魅力!再次感谢! – tsWIDE