6

1 つの列で3 つ以上の連続した s を取得した行を削除したいと思いNAます。

      [,1] [,2] 
[1,]    1    1   
[2,]   NA    1   
[3,]    2    4   
[4,]   NA    3   
[6,]    1    4   
[7,]   NA    8
[8,]   NA    5
[9,]   NA    6

だから私はこのデータを持っているでしょう

      [,1] [,2] 
[1,]    1    1   
[2,]   NA    1   
[3,]    2    4   
[4,]   NA    3   
[6,]    1    4 

私は調査を行い、このコードを試しました

data[! rowSums(is.na(data)) >3  , ]

しかし、これは連続した s にのみ使用されると思いますNA

4

3 に答える 3

13

前述のように、rle開始するのに適した場所です。

is.na.rle <- rle(is.na(data[, 1]))

NA は 3 つ以上の場合にのみ「悪い」ので、値を書き直すことができます。

is.na.rle$values <- is.na.rle$values & is.na.rle$lengths >= 3

最後に、inverse.rleフィルタするインデックスのベクトルを作成するために使用します。

data[!inverse.rle(is.na.rle), ]
于 2013-05-30T18:21:12.830 に答える