0

我有一个形式的矩阵:

[,1] [,2]
1    0
100  0
200  1
300  1
400  1
500  0
600  0
700  1
800  1
900  1

我正在尝试制作一个 R 脚本,该脚本在第 2 列上选择至少 3 个连续的“1”值,例如,检索

200  1
300  1
400  1
700  1
800  1
900  1

但找不到简单的方法来做到这一点。有没有人遇到过这样的问题?我真的很感激!!!谢谢!!!

4

2 回答 2

4

我会使用rleinverse.rle如下:

r <- rle(mat[, 2])
r$values[r$values != 1 | r$lengths < 3] <- 0
keep <- as.logical(inverse.rle(r))
mat[keep, ]
于 2013-07-28T15:25:10.907 回答
3

您可以使用rle. 假设您的矩阵是M并且您感兴趣的列是2,那么您可以使用以下方法创建一个过滤器:

filter <- with(rle(M[,2]), rep(lengths>=3 & values==1, lengths))

然后使用过滤矩阵

M[filter,]
于 2013-07-28T15:25:52.970 回答