【发布时间】:2014-08-31 13:20:54
【问题描述】:
我正在按照这种方法在 (0,1) 矩阵中查找 1 的矩形
Find 5 consecutive numbers >= 3 for each row of a matrix
但是当我尝试在这个矩阵中找到 1x4 矩形(1 行和 4 列)时出现问题
m <- matrix(c(0,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0), nrow = 6, ncol = 5, byrow = TRUE)
有四个矩形:第 1 行、第 4 行、第 5 行和第 6 行
[,1] [,2] [,3] [,4] [,5]
[1,] 0 1 1 1 1
[2,] 0 0 0 1 0
[3,] 1 0 0 1 0
[4,] 1 1 1 1 0
[5,] 0 1 1 1 1
[6,] 1 1 1 1 0
当我为这种情况运行代码时,我得到了 4 个结果,但其中两个(第 4 行和第 6 行)都从第一列开始,但结果我得到第 5 列的起始列和第 8 列的结束列矩阵是 6x5,无法找出问题所在。
b<-m
for (j in 1:5){
cont<-1
for (i in 6:1) {
if (m[i,j]==0){
cont<-1
b[i,j]<-NA}
else {b[i,j]<-cont
cont<-cont+1}
}
}
mdat<-b
apply(mdat, 1, function(x) {
r <- rle(x >= 1)
w <- which(!is.na(r$values) & r$values & r$lengths >=4)
if (length(w) > 0) {
before <- sum(r$lengths[1:(w[1]-1)])
c(before+1,before+ r$lengths[w[1]])
} else
NULL
})
[[1]]
[1] 2 5
[[2]]
NULL
[[3]]
NULL
[[4]]
[1] 5 8
[[5]]
[1] 2 5
[[6]]
[1] 5 8
【问题讨论】:
-
您将什么定义为“矩形”?您的意思是连续 4 个
1在一行中? -
是的,对我来说它是一个 1x4 矩形