按块选择R矩阵值

时间:2013-07-28 14:57:08

标签: r

我有一个表格矩阵:

[,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

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

2 个答案:

答案 0 :(得分:4)

我会使用rleinverse.rle,如下所示:

r <- rle(mat[, 2])
r$values[r$values != 1 | r$lengths < 3] <- 0
keep <- as.logical(inverse.rle(r))
mat[keep, ]

答案 1 :(得分:3)

您可以使用rle。假设您的矩阵为M且感兴趣的列为2,那么您可以使用以下内容创建过滤器:

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

然后使用

过滤矩阵
M[filter,]