NA

2017-10-12 4 views
1

は、私は次のようdata.frameを持っていると言う前と後の例平均でNAを置き換えますNA

t<-c(1,1,2,4,5,4) 
u<-c(1,3,4,5,4,2) 
v<-c(2,3,4,5,NA,2) 
w<-c(NA,3,4,5,2,3) 
x<-c(2,3,4,5,6,NA) 

df<-data.frame(t,u,v,w,x) 

私は前と後の例の平均を表す値でNASに交換したいと思います行を開始(行4)または終了(行5)しない限り、NAを指定します。行がNAで始まる場合は、次のようにNAを代用したいと思います。行がNAで終わったら、NAを前の場合に置き換えたいと思います。

このように、私は私の出力は次のようになりたい:

t<-c(1,1,2,4,5,4) 
u<-c(1,3,4,5,4,2) 
v<-c(2,3,4,5,3.5,2) 
w<-c(3,3,4,5,2,3) 
x<-c(2,3,4,5,6,6) 

df<-data.frame(t,u,v,w,x) 
+0

コメントを出力する代わりに、質問を編集してください。 – r2evans

+0

''動物園 'の '?na.aggregate'を見てみましょう – akrun

+0

次のケースとそれ以前のケースをどういう意味ですか? –

答えて

3

質問はNAと入力df開始の列4 NAでNAと行5結末ではなく、実際に始まる4行を参照します入力の列5はNAで終わり、入力開始または終了の行4も行5もNAで終わらないので、その列は行ではなく行であると仮定します。また、質問にdfという名前の2つのデータフレームがあります。明らかに1つは入力を表すはずであり、同じ名前を持つ他のデータフレームは出力ですが、最後の注記で使用したdfの定義を繰り返しています。

na.approx動物園ではかなりそうです。 (マトリックス結果がOKであれば、data.frame()一部を省略。)

library(zoo) 

data.frame(na.approx(df, rule = 2)) 

を与える:

t u v w x 
1 1 1 2.0 3 2 
2 1 3 3.0 3 3 
3 2 4 4.0 4 4 
4 4 5 5.0 5 5 
5 5 4 3.5 2 6 
6 4 2 2.0 3 6 

df <- structure(list(t = c(1, 1, 2, 4, 5, 4), u = c(1, 3, 4, 5, 4, 
2), v = c(2, 3, 4, 5, NA, 2), w = c(NA, 3, 4, 5, 2, 3), x = c(2, 
3, 4, 5, 6, NA)), .Names = c("t", "u", "v", "w", "x"), row.names = c(NA, 
-6L), class = "data.frame") 
を明確にするために、我々は、上記の入力として、このデータフレームを使用
0
sapply(df, function(x){ 
    replace(x, is.na(x), rowMeans(cbind(c(NA, head(x, -1)), c(x[-1], NA)), na.rm = TRUE)[is.na(x)]) 
}) 
#  t u v w x 
#[1,] 1 1 2.0 3 2 
#[2,] 1 3 3.0 3 3 
#[3,] 2 4 4.0 4 4 
#[4,] 4 5 5.0 5 5 
#[5,] 5 4 3.5 2 6 
#[6,] 4 2 2.0 3 6