2016-06-15 23 views
1

データフレームにna.approxを適用します。NAが自分のデータベースの最初または最後の行にある場合は機能しません。R最初の行がNAを持たないまでデータフレームの最初の行を削除します

どのように私は次の操作を実行する関数を記述します: 「データフレームの最初の行の任意の値はNAですが、最初の行を削除」

例のデータフレームを:

x1=x2=c(1,2,3,4,5,6,7,8,9,10,11,12) 
x3=x4=c(NA,NA,3,4,5,6,NA,NA,NA,NA,11,12) 
df=data.frame(x1,x2,x3,x4) 

この例では、データフレームのための結果は次のようになります。

result=df[-1:-2,] 

私の現在の試みはすべてこれに似:

replace_na=function(df){ 
while(anyNA(df[1,])=TRUE){ 
    df=df[-1,], 
    return(df) 
} 
#this is where I would apply the na.approx function to the data frame 
} 

ご協力いただきありがとうございます。ありがとうございます!

答えて

2

Psidomの答えは素晴らしいですが、あなたはまた、独自のカスタム機能を修正することができます@:その2行目に

replace_na=function(df){ 
    while(anyNA(df[1,])==TRUE){ 
     df=df[-1,] 
    } 
#this is where I would apply the na.approx function to the data frame 
return(df) 
} 

を、==が同じですサインを使用する必要があります。 2行目ではカンマが余分でした。そして、最後にをwhileループの外に移動する必要がありました。

replace_na(df) 
# x1 x2 x3 x4 
# 3 3 3 3 3 
# 4 4 4 4 4 
# 5 5 5 5 5 
# 6 6 6 6 6 
# 7 7 7 NA NA 
# 8 8 8 NA NA 
# 9 9 9 NA NA 
# 10 10 10 NA NA 
# 11 11 11 11 11 
# 12 12 12 12 12 
+1

これは素晴らしいです、それを修正していただきありがとうございます。 – Anne

3

complete.casesを使用できます。 cumsumでは、最初の不完全な行が削除されます。

df[cumsum(complete.cases(df)) != 0, ] 
    x1 x2 x3 x4 
3 3 3 3 3 
4 4 4 4 4 
5 5 5 5 5 
6 6 6 6 6 
7 7 7 NA NA 
8 8 8 NA NA 
9 9 9 NA NA 
10 10 10 NA NA 
11 11 11 11 11 
12 12 12 12 12 
+1

を使用することができます。 ... しかたがない。 – lmo

+0

あなたのソリューションをありがとう、多くの他のユーザーに非常に役立つと私のために働いた。私はそれが私の乱雑なコードを修正し、私の2番目のステップに適用する方が簡単です(最後の行に同じを行う) – Anne

0

我々はまた、あなたが5秒で私を倒すwhich.maxis.na

df[which.max(!rowSums(is.na(df))):nrow(df),] 
# x1 x2 x3 x4 
#3 3 3 3 3 
#4 4 4 4 4 
#5 5 5 5 5 
#6 6 6 6 6 
#7 7 7 NA NA 
#8 8 8 NA NA 
#9 9 9 NA NA 
#10 10 10 NA NA 
#11 11 11 11 11 
#12 12 12 12 12 
関連する問題