2017-08-10 124 views
0

我有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等試圖動物園包,但鴕鳥政策得到它,來表達對一個正確的條件語句這種「條件近似」或「條件間隙填充」。任何提示是值得歡迎的,非常感激。

預先感謝

回答

1

更換的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