假设我们有一些包含一些数字数据的向量。 例如:
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 中实现它?
提前致谢!
答案 0 :(得分:3)
您可以在此处使用带有计数器的简单 for 循环。
counter <- 0
for (i in vect){
if (i == 0){
counter<-counter+1
} else {
break()
}
print(counter)
您可以轻松地将其包装在一个函数中以供重用,只需用 return 替换打印即可。
答案 1 :(得分: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])