1

パッケージの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

誰でもこの問題の解決策を持っていますか?

4

2 に答える 2

6

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))
于 2016-03-21T09:47:16.870 に答える
0

データフレームの名前が「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) , ]
于 2016-03-21T09:36:05.480 に答える