我想找到一种方法从我的矩阵中选择正确的“11”
。
从左上角开始,按 [1, 1]
开始,按行从左到右的方向移动。
每次看到组合“01”
或“00”
时,您应该继续从左向右移动,直到找到一些“11”
.
在示例 1 中,正确的解决方案是位置 [1, 3]
上的 “11”
。
# Example 1:
(R)
# [,1] [,2] [,3]
# [1,] 01 01 11
# [2,] 11 01 11
# [3,] 01 11 10
一旦有了“10”
,您必须更改行并从第二行开始。
在示例 2 中,代码必须在 [2, 1]
位置以结果 "11"
结束。
# Example 2:
(R1)
# [,1] [,2] [,3]
# [1,] 01 10 11
# [2,] 11 01 11
# [3,] 01 11 10
下面的命令适用于第二个示例,但不适用于第一个示例。
which(R == "11", arr.ind = T)
我正在寻找矩阵中正确的“11”
的位置。任何想法将不胜感激!
附: 对于 R 和 R1 的复制:
R <- structure(c("01", "11", "01", "01", "01", "11", "11", "11", "10"), .Dim = c(3L, 3L))
R1 <- structure(c("01", "11", "01", "10", "01", "11", "11", "11", "10"), .Dim = c(3L, 3L))
最佳答案
这是另一个可以为您完成此操作的小函数:
foo <- function(mat, a, b) {
res <- t(apply(mat, 1, function(x) replace(x, cumsum(x == a) > 0, NA)))
res <- which(res == b, arr.ind = TRUE)
res[order(res[,1], res[,2]),][1,]
}
foo(R, "10", "11")
#row col
# 1 3
foo(R1, "10", "11")
#row col
# 2 1
这按行工作,并将“10”之后的任何元素替换为 NA,然后获取第一个出现的“11”。
关于r - 从矩阵中选取一个序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47715347/