r - 从矩阵中选取一个序列

标签 r matrix sequence

我想找到一种方法从我的矩阵中选择正确的“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/

相关文章:

r - 计算向量中下一个元素与前一个元素不同的次数

r - R 计算函数参数方式的魔力

c++ - 使用 for 循环的矩阵乘法会降低性能吗?

algorithm - 想在对排序矩阵使用二进制搜索逻辑时了解时间复杂度

list - 将矩阵转换为列向量列表

python - 在 python 3.5 中,当使用参数列表作为 subprocess.Popen() 的输入时,我无法获得正确的 len(sys.argv)

wsdl - 如何恢复xsd :elements in xsd:sequence wrappers when websphere is upgraded?的原始顺序

r - 使用 r 中的 `for loop` 函数将 `map` 翻译成 purrr

r - 如何从字符串中查找特定单词并按这些单词合并变量

xml - 选择的 XSD 序列