gpt4 book ai didi

r - 查找与候选值向量中的值匹配的矩阵元素的数组索引

转载 作者:行者123 更新时间:2023-12-04 12:02:44 27 4
gpt4 key购买 nike

我已经对此进行了一段时间的糊涂和stackoverflowing,但是我似乎找不到正确的答案。

我有一个矩阵,其中包含不同的字符串,例如"a""gamma",甚至是强制转换为字符的数字。

如果m的元素与候选值向量中的值匹配(请注意这些值可以是任何字符串),如何获取矩阵m的数组索引。这是我尝试过的。我虽然which(m %in% ...)可以做到,但它没有返回我期望的结果。

m <- matrix(c(0, "a", "gamma", 0, 0.5, 0, 0, 0, 0), ncol = 3)
m
#> [,1] [,2] [,3]
#> [1,] "0" "0" "0"
#> [2,] "a" "0.5" "0"
#> [3,] "gamma" "0" "0"

which(m == "a", arr.ind = TRUE) # as expected
#> row col
#> [1,] 2 1

which(m == "a" | m == "gamma", arr.ind = TRUE) # also obvious
#> row col
#> [1,] 2 1
#> [2,] 3 1

candidates <- c("a", "gamma", "b")
which(m %in% candidates, arr.ind = TRUE) # not what I expected
#> [1] 2 3

reprex package(v0.3.0)创建于2019-09-11
  • 我想要的结果是m中元素的行和列索引
    匹配candiates中的值。
  • 如果可能的话,我更喜欢基本的R解决方案。

  • 有什么帮助吗?

    最佳答案

    MrFlick的解决方案可能是您将获得的最好的解决方案之一,但是如果您必须坚持使用基本R中的内置函数,这是一种方法-

    which(matrix(m %in% candidates, dim(m)), arr.ind = T)

    row col
    [1,] 2 1
    [2,] 3 1

    使用 lapplyReduce的另一种方法,但是上面的方法应该更快-
    which(Reduce("|", lapply(candidates, function(x) m == x)), arr.ind = T)

    row col
    [1,] 2 1
    [2,] 3 1

    关于r - 查找与候选值向量中的值匹配的矩阵元素的数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57891929/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com