gpt4 book ai didi

r - 在R中有效地提取逻辑矩阵中每行的第一个TRUE

转载 作者:行者123 更新时间:2023-12-04 11:05:58 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to vectorize this operation on every row of a matrix

(3 个回答)


4年前关闭。




给定以下矩阵:

         A     B    C
[1,] TRUE FALSE TRUE
[2,] FALSE TRUE TRUE
[3,] FALSE FALSE TRUE
[4,] FALSE TRUE TRUE
[5,] FALSE TRUE TRUE
[6,] TRUE TRUE TRUE

m <- structure(c(TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE,
FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), .Dim = c(6L,
3L), .Dimnames = list(NULL, c("A", "B", "C")))

我们如何提取每行具有 TRUE 值的第一列 高效 ?当然,我们可以使用 apply每行然后得到 min(which(...)) .

这是所需的输出:
[1] A B C B B A

This thread可能看起来与我的问题重复,但不是:
  • 这里我们说的是逻辑矩阵 不是数字数据框
  • 这里我们寻求获得第一个 TRUE 的位置而不是最高值
  • 最佳答案

    我们可以使用 max.col

    colnames(m)[max.col(m, "first")]
    #[1] "A" "B" "C" "B" "B" "A"

    如果一行中没有TRUE,那么我们可以将其更改为 NA (如果需要的话)
    colnames(m)[max.col(m, "first")*NA^!rowSums(m)]

    或与 ifelse
    colnames(m)[ifelse(rowSums(m)==0, NA, max.col(m, "first"))]

    关于r - 在R中有效地提取逻辑矩阵中每行的第一个TRUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39410967/

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