2016-12-14 4 views
1

スプライン法を使用して時系列を補間したいと思います。私は 'ギャップ許容値'を使用したいと思います。連続するx日数がNAの場合、データはNAのままであり、補間されません。私の例では、NAsの連続した3日以上がある場合、私は補間しません。データ例:データ補間条件付きギャップ長

x <- seq(as.Date("2016-01-01"),as.Date("2016-01-31"),by="day") 
y <- c(0.45062130 ,0.51136174 ,NA ,NA ,0.29481738 ,NA ,0.27713756 ,0.62638512 ,0.23547530,0.29253901 ,0.75899501 ,0.67779756 ,0.51831742 ,0.08050147 ,0.71183739 ,NA ,0.79406706 ,NA,0.03434758 ,0.59573892 ,0.22102821 ,0.13154414 ,NA ,NA ,NA ,NA ,0.23692593,0.95215104 ,0.38810846 ,0.17970580 ,0.05176054) 

df <- data.frame(x,y) 

> df 
      x   y 
2016-01-01 0.45062130 
2016-01-02 0.51136174 
2016-01-03   NA 
2016-01-04   NA 
2016-01-05 0.29481738 
2016-01-06   NA 
2016-01-07 0.27713756 
2016-01-08 0.62638512 
2016-01-09 0.23547530 
2016-01-10 0.29253901 
2016-01-11 0.75899501 
2016-01-12 0.67779756 
2016-01-13 0.51831742 
2016-01-14 0.08050147 
2016-01-15 0.71183739 
2016-01-16   NA 
2016-01-17 0.79406706 
2016-01-18   NA 
2016-01-19 0.03434758 
2016-01-20 0.59573892 
2016-01-21 0.22102821 
2016-01-22 0.13154414 
2016-01-23   NA 
2016-01-24   NA 
2016-01-25   NA 
2016-01-26   NA 
2016-01-27 0.23692593 
2016-01-28 0.95215104 
2016-01-29 0.38810846 
2016-01-30 0.17970580 
2016-01-31 0.05176054 

私は2つの新しいデータフレームを作成することを考えました。第1のものは完全に補間され、第2のものはギャップ公差の下でNAsを除去し、マージする。これを行うより良い方法はありますか?

マイ所望のデータセットは、次のようになります。

> df 
      x   y 
2016-01-01 0.45062130 
2016-01-02 0.51136174 
2016-01-03 0.35684617 
2016-01-04 0.30481738 
2016-01-05 0.29481738 
2016-01-06 0.28481738 
2016-01-07 0.27713756 
2016-01-08 0.62638512 
2016-01-09 0.23547530 
2016-01-10 0.29253901 
2016-01-11 0.75899501 
2016-01-12 0.67779756 
2016-01-13 0.51831742 
2016-01-14 0.08050147 
2016-01-15 0.71183739 
2016-01-16 0.75158886 
2016-01-17 0.79406706 
2016-01-18 0.21584455 
2016-01-19 0.03434758 
2016-01-20 0.59573892 
2016-01-21 0.22102821 
2016-01-22 0.13154414 
2016-01-23   NA 
2016-01-24   NA 
2016-01-25   NA 
2016-01-26   NA 
2016-01-27 0.23692593 
2016-01-28 0.95215104 
2016-01-29 0.38810846 
2016-01-30 0.17970580 
2016-01-31 0.05176054 

答えて

1

は、動物園のパッケージにna.splineを試してみてください。 (fortify.zoo(z)は、zをデータフレームに変換しますが、他の施設も利用できるようにするには、そのデータを動物園のフォームに保存することをお勧めします)。また、動物園の他のna。*機能もチェックしてください。

library(zoo) 
z <- na.spline(zoo(y, x), maxgap = 2) 

与える:

> z 
2016-01-01 2016-01-02 2016-01-03 2016-01-04 2016-01-05 2016-01-06 2016-01-07 
0.45062130 0.51136174 0.50365727 0.43252778 0.29481738 0.14613360 0.27713756 
2016-01-08 2016-01-09 2016-01-10 2016-01-11 2016-01-12 2016-01-13 2016-01-14 
0.62638512 0.23547530 0.29253901 0.75899501 0.67779756 0.51831742 0.08050147 
2016-01-15 2016-01-16 2016-01-17 2016-01-18 2016-01-19 2016-01-20 2016-01-21 
0.71183739 1.06652092 0.79406706 0.17526465 0.03434758 0.59573892 0.22102821 
2016-01-22 2016-01-23 2016-01-24 2016-01-25 2016-01-26 2016-01-27 2016-01-28 
0.13154414   NA   NA   NA   NA 0.23692593 0.95215104 
2016-01-29 2016-01-30 2016-01-31 
0.38810846 0.17970580 0.05176054