2017-10-13 1 views
-2

で終了私はdata.frameがあるとしない限り、NA前後のケースの平均値とNAを交換:行起動またはNA

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

    t u v w x 
1 1 1 2 2 2 
2 1 3 3 3 3 
3 2 4 4 4 4 
4 4 6 NA 5 5 
5 NA 4 3 2 6 
6 3 2 2 3 NA 

NAとなるようにIは、NASを変更したいですNAの前の1つの値とNAの後の1つの値の平均で置き換えられます。しかし、NAで始まる行があれば、その行に続く値で置き換えてください。行がNAで終わると、NAの前の値に置き換えてください。私は数千行を持っているので、任意のヘルプは非常に高く評価されて

t u v w x 
1 1 1 2 2 2 
2 1 3 3 3 3 
3 2 4 4 4 4 
4 4 6 5.5 5 5 --> NA becomes average of 6 and 5 
5 4 4 3 2 6 --> NA becomes value of next case 
6 3 2 2 3 3 --> NA becomes value of previous case 

:したがって、私は次のような結果を得たいと思います!

答えて

0

以前na.approxソリューションに基づいて、これはトリック行う可能性があります:

library(zoo) 
t(apply(df, 1,function(x) na.approx(x,rule=2))) 
+0

これは本当にトリックでした!あなたは真の英雄です。 –

+0

このエラーは 'na.approx(x、rule = 2)のエラー:関数" na.approx " –

+1

' library(zoo) 'が見つかりませんでした。それを含めて – Sotos

0

パラメータna.rm = Tは、使用する関数で常に検索してください。 この場合、na.rmパラメーターがtrueに設定された列の平均値を使用します。 次に、NA-sを代用したいとします。

dt[is.na(dt[,'t']),'t'] = 0 

は、NAがと交換NA(ラグ+リード)/ 2まだの場合に置き換えている場合

、ここで

0

可能な解決策がある(私はディメンションの順序を逆にしていないと仮定して)それでもNAの場合は、リードと交換してください。

library(dplyr) 
t(apply(df, 1, function(x){ 
    lagx = dplyr::lag(x) 
    leadx = dplyr::lead(x) 
    b = ifelse(is.na(x),(leadx+lagx)/2, x) 
    b = ifelse(is.na(b), leadx, b) 
    b = ifelse(is.na(b), lagx, b) 
    return(b) 
    } 
)) 
#output 
    t u v w x 
[1,] 1 1 2.0 2 2 
[2,] 1 3 3.0 3 3 
[3,] 2 4 4.0 4 4 
[4,] 4 6 5.5 5 5 
[5,] 4 4 3.0 2 6 
[6,] 3 2 2.0 3 3 
+0

これはまた、作品を!ありがとう!! –

+0

@Hardik gupta列は1つの小数点以下に丸められますが、帰属する値の1つが小数点以下を持つので、開始データの 'df [4,3] = 5.5'でも同じことが起こります。 – missuse

0
t<-c(1,1,2,4,NA,3) 
u<-c(1,3,4,6,4,2) 
v<-c(2,3,4,NA,3,2) 
w<-c(2,3,4,5,2,3) 
x<-c(2,3,4,5,6,NA) 
df<-data.frame(t,u,v,w,x) 

df[which(is.na(t)), "t"] <- df[which(is.na(t)), "u"] 
df[which(is.na(x)), "x"] <- df[which(is.na(x)), "w"] 
df[which(is.na(v)), "v"] <- (df[which(is.na(v)), "u"] + df[which(is.na(v)), "w"])/2 

> df 
    t u v w x 
1 1 1 2.0 2 2 
2 1 3 3.0 3 3 
3 2 4 4.0 4 4 
4 4 6 5.5 5 5 
5 4 4 3.0 2 6 
6 3 2 2.0 3 3 
関連する問題