按块选择R矩阵值

按块选择R矩阵值,r,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 但却找不到一个简单的方法。有人遇到过这样的问题吗?我真的很感激!!!谢谢 我将使用rle和reverse.rle如下: r <- rle(mat[, 2

我有一个矩阵的形式:

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

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

我将使用
rle
reverse.rle
如下:

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

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

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

您的示例没有反映此任务的复杂性。因为在这里,
dat[dat[,2]==1,]
就可以了。例如,加上两个连续的“一”或在零后加一。是的,这正是我的问题。选择1不是一个交易,但连续1是我陷入困境的地方:(同样的想法,我喜欢使用
rep
作为
inverse.rle
的替代品。
M[filter,]