【问题标题】:How to count number of TRUE values in a logical vector before FALSE如何在 FALSE 之前计算逻辑向量中 TRUE 值的数量
【发布时间】:2016-04-01 11:09:52
【问题描述】:

在尝试在向量中查找 TRUE 值的数量时,我遇到了第一个 Google hit。但是,这并不能完全满足我的要求。我有兴趣在第一个 FALSE 之前的向量中找到 TRUE 值的数量(如果有)。我有一个向量a <- c(TRUE,TRUE,TRUE,FALSE,TRUE, TRUE) 并想在FALSE 之前找到所有TRUE 值,因此输出将为三个。请注意,如果向量中只有 TRUE 值,它也应该工作。

【问题讨论】:

    标签: r logical-operators


    【解决方案1】:

    这里有一个简短的方法:

    sum(cumprod(a))
    # [1] 3
    

    其中cumprod 给出一个累积乘积(在这种情况下是零和一);因此,它消除了第一个 FALSE 之后的所有 TRUE,如

    cumprod(a)
    # [1] 1 1 1 0 0 0 
    

    【讨论】:

      【解决方案2】:

      使用下面的语句我们可以很容易地得到结果。

      which.min(a)-1
      

      【讨论】:

      • ...在大向量上比基于cumprod() 的解决方案要快一些。对于一个故意不好的例子,比较以下两种解决方案:a <- rep(c(TRUE, FALSE, TRUE), c(42, 1, 1e8))
      • 此方法不适用于仅包含 TRUE 值的向量。仅适用于 TRUE,FALSE 的组合
      • 好的,然后你需要另一个if()检查。如果结果为0,则需要将其更改为length(a)。如果您需要多次或在非常大的数据上应用此方法,那么时机仍然会更好。如果您只是需要它作为一种便利功能,那么基于cumprod() 的单行解决方案可能会更快地输入/记住。
      • 并非总是如此!这仅适用于所有 TRUE 值,如果都是 FALSE ,在这种情况下也会返回 0 ,并且不能将其更改为长度(a)
      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2020-11-02
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多