我想删除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)