2016-03-21 4 views
1

zooパッケージのna.locf機能に関する質問があります。以下のデータフレーム内で、私は先進的なNAs(1987年、1988年)を削除したいが、前年(1993年)の有効な値でそれらを保持したい。na.locf先進的なNAsを削除する、他の人を保つ

Year  X 
1987  NA 
1988  NA 
1989  2 
1990  5 
1991  9 
1992  16 
1993  NA 
1994  27 
1995  36 

誰にもこの問題の解決策がありますか?

+0

1 986はNAではない、あなたは1987年を保つだろうか? – zx8754

答えて

3

na.locfは、観測値の欠落を補うためであり、削除しないように設計されています。

na.trim(mydf) 

います:sidesパラメータで

> na.trim(mydf) 
    Year X 
3 1989 2 
4 1990 5 
5 1991 9 
6 1992 16 
7 1993 NA 
8 1994 27 
9 1995 36 

だけ不足している観測を先頭または末尾に削除するかどうかを選択することができます動物園のパッケージには、先頭および/または末尾の観測を削除na.trim機能を持っていますまたは両方。たとえばsides = 'right'のために使用することでのみ欠損値を末尾削除し、主要な欠損値を保持します:

> na.trim(mydf, sides = 'right') 
    Year X 
1 1987 NA 
2 1988 NA 
3 1989 2 
4 1990 5 
5 1991 9 
6 1992 16 
7 1993 NA 
8 1994 27 
9 1995 36 

その結果、sides = 'left'を使用する唯一の主要な欠損値を削除し、末尾の欠損値を保持します:

> na.trim(mydf, sides = 'left') 
    Year X 
3 1989 2 
4 1990 5 
5 1991 9 
6 1992 16 
7 1993 NA 
8 1994 27 
9 1995 36 
10 1996 NA 

使用データ:

mydf <- structure(list(Year = 1987:1996, X = c(NA, NA, 2L, 5L, 9L, 16L, NA, 27L, 36L, NA)), 
        .Names = c("Year", "X"), class = "data.frame", row.names = c(NA,-10L)) 
0

あなたのデータフレームの名前が「df」であると仮定します。

すべてのNAの無効な番号に、言う-1

df$X[is.na(df$X)] <- -1 

今すぐランレングス符号化を行うと、-1,2のラン長が1

より大きい観測値を削除変換
rle(df$X) 
Run Length Encoding 
    lengths: int [1:5] 2 1 1 ... 
    values : num [1:5] -1 2 5 ... 
df$runs <- rep(rle(df$X)$lengths,rle(df$X)$lengths) 

data2 <- df[!(df$X==-1 & df$runs > 1) , ] 
+0

今私は確信しています –

+0

@DavidArenburg質問は私たちがNAで先行されていないNAを維持する必要があると述べていますが、私たちは値で囲まれたままにすることができます –

+0

おそらく、なぜOPが「先導」しているのか分かりません。この質問は私には不透明なようです。 –

関連する問題