列中的连续NAs

Mar*_*rco 4 r list na

我想删除NA一列中连续超过3行的行.

      [,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
Run Code Online (Sandbox Code Playgroud)

所以我有这些数据

      [,1] [,2] 
[1,]    1    1   
[2,]   NA    1   
[3,]    2    4   
[4,]   NA    3   
[6,]    1    4 
Run Code Online (Sandbox Code Playgroud)

我做了一个研究,我尝试了这段代码

data[! rowSums(is.na(data)) >3  , ]
Run Code Online (Sandbox Code Playgroud)

但我认为这只用于连续的连续NAs.

flo*_*del 10

如上所述,这rle是一个很好的起点:

is.na.rle <- rle(is.na(data[, 1]))
Run Code Online (Sandbox Code Playgroud)

由于NAs只有在三个或更多时才"坏",我们可以重写这些值:

is.na.rle$values <- is.na.rle$values & is.na.rle$lengths >= 3
Run Code Online (Sandbox Code Playgroud)

最后,用于inverse.rle构建要过滤的索引向量:

data[!inverse.rle(is.na.rle), ]
Run Code Online (Sandbox Code Playgroud)