時系列の日付に欠損値があります。例えば:
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)
}