/ /連続NA(R)の数によって制限される、時系列で欠損値を補間する方法 - r、時系列、補間、欠損データ

連続したNAs(R)の数によって制限される、時系列で欠けている値を補間する方法は? - r、時系列、補間、欠落データ

時系列の日付に欠損値があります。例えば:

set.seed(101)

df <- data.frame(DATE = as.Date(c("2012-01-01", "2012-01-02",
"2012-01-03", "2012-01-05", "2012-01-06", "2012-01-15", "2012-01-18",
"2012-01-19", "2012-01-20", "2012-01-22")),
VALUE = rnorm(10, mean = 5, sd = 2))

すべてを埋めるような関数を書くにはどうすればいいですか最初の日付と最後の日付の間の欠損値(例:2012-01-01と2012-01-22 ")、そして内挿(線形および平滑化スプライン)を使用して欠損値を埋めます。 2012-01-06と2012-01-15の間の補間)?

この機能は非常に大きなものに適用されます。データフレーム。 2つの日付の間のすべての欠損値を埋めるために線形補間を使用する関数を書くことはできました(下記参照)が、長い範囲の欠損値を補間するのを止める方法を理解することはできません。

interpolate.V <- function(df){

# sort data by time
df <- df[order(df$DATE),]

# linnearly interpolate VALUE for all missing DATEs
temp <- with(df, data.frame(approx(DATE, VALUE, xout = seq(DATE[1],
DATE[nrow(df)], "day"))))
colnames(temp) <- c("DATE", "VALUE_INTERPOLATED")
temp$ST_ID <- df$ST_ID[1]
out <- merge(df, temp, all = T)
rm(temp)

return(out)
}

どんな助けでも大歓迎です!

ありがとう

回答:

回答№1は1

欠けているすべての日付に対して行を追加する関数。

date.range <- function(sub){

sub$DATE <- as.Date(sub$DATE)
DATE <- seq.Date(min(sub$DATE), max(sub$DATE), by="day")
all.dates <- data.frame(DATE)
out <- merge(all.dates, sub, all = T)

return(out)
}

maxgap引数を指定して、zooパッケージのna.approxまたはna.splineを使用します。

interpolate.zoo <- function(df){
df$VALUE_INT <- na.approx(df$VALUE, maxgap = 3, na.rm = F)
return(df)
}