【问题标题】:Counting leading zeros in a vector计算向量中的前导零
【发布时间】:2021-07-14 16:34:11
【问题描述】:

假设我们有一些包含一些数字数据的向量。 例如:

vect1<- c(0, 0, 0, 60, 40, 80, 0)
vect2<- c(100, 0, 0, 80, 40)
vect3<- c(0,0,1,2,3)

我想计算这个向量中“前导零”的数量......所以在这种情况下,我希望为 vect1 返回值 3,为 vect2 返回值 0,以及值2 返回 vect3。我将如何在 R 中实现这一点?

提前致谢!

【问题讨论】:

  • which.min(!x)-1 或 sum(cumprod(!x))

标签: r


【解决方案1】:

您可以在此处使用带有计数器的简单 for 循环。

counter <- 0 
for (i in vect){
   if (i == 0){
      counter<-counter+1
   } else {
      break()
   }
print(counter)

您可以轻松地将其包装在一个函数中以供重复使用,只需将 print 替换为 return。

【讨论】:

    【解决方案2】:

    有几种方法可以做到这一点。一种选择是获取向量不为0的累积和,然后将其转换为逻辑并获取sum

    f1 <- function(x) sum(cumsum(x != 0) == 0)
    

    -测试

    > f1(vect1)
    [1] 3
    > f1(vect2)
    [1] 0
    > f1(vect3)
    [1] 2
    

    或者也可以使用rle

    f2 <- function(x) with(rle(x == 0), lengths[1][values[1]][1])
    

    【讨论】:

    • 谢谢!我知道这很简单,我只是想不出该怎么做。我会尽可能接受答案。
    猜你喜欢
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 2019-08-12
    • 2019-07-21
    • 2022-01-21
    相关资源
    最近更新 更多