パッケージのna.locf機能について質問があります。zoo以下のデータ フレーム内で、先頭の NA (1987 年、1988 年) を削除しますが、前年 (1993 年) の有効な値を持つものを保持します。
Year X
1987 NA
1988 NA
1989 2
1990 5
1991 9
1992 16
1993 NA
1994 27
1995 36
誰でもこの問題の解決策を持っていますか?
はna.locf、欠落している観測を削除するのではなく、埋めるように設計されています。Zoo パッケージには、na.trim先頭および/または末尾の観測を削除する機能もあります。
na.trim(mydf)
与える:
> 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
パラメータを使用して、sides先頭または末尾の欠落観測のみを削除するか、または両方を削除するかを選択できます。たとえば、次のように使用する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))
データフレームの名前が「df」であると仮定します。
すべての NA を無効な数値 (-1 など) に変換します。
df$X[is.na(df$X)] <- -1
ここでランレングス エンコーディングを実行し、-1 のランレングスが 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) , ]