4

私のデータセットは次のようになります (「a」と呼びましょう):

date value
2013-01-01 12.2
2013-01-02 NA
2013-01-03 NA
2013-01-04 16.8
2013-01-05 10.1
2013-01-06 NA
2013-01-07 12.0

NA最も近い周囲の値 (シリーズの前と次の値) の平均値に置き換えたいと思います。

以下を試しましたが、出力に納得できません...

miss.val = which(is.na(a$value))
library(zoo)
z = zoo(a$value, a$date)
z.corr = na.approx(z)
z.corr[(miss.val - 1):(miss.val + 1), ]
4

2 に答える 2

3

na.locfパッケージの (最後の観察の繰り越し) の使用zoo:

R> library("zoo")
R> x <- c(12.2, NA, NA, 16.8, 10.1, NA, 12.0)
R> (na.locf(x) + rev(na.locf(rev(x))))/2
[1] 12.20 14.50 14.50 16.80 10.10 11.05 12.00

x( の最初または最後の要素がの場合は機能しませんNA)

于 2013-09-04T11:45:18.877 に答える
2

これは、 imputeTSパッケージの移動平均na.ma関数を使用して、1 行のコードで正確に実行できます。

library(imputeTS)
na_ma(yourData, k = 1)

これにより、欠損値が最も近い周囲の値の平均に置き換えられます。さらにパラメータを設定することもできます。

na_ma(yourData, k =2, weighting = "simple")

この場合、アルゴリズムは各方向で次の 2 つの値を取得します。値の異なる重み付けを選択することもできます (値が近いほど影響が大きくなる場合があります)。

于 2018-11-09T18:50:34.440 に答える