计算向量中开关数的计数

时间:2017-06-12 13:42:01

标签: r

我有一个向量,我必须计算数据从0切换到100并返回0的次数。示例如下所示。

Input
X1<-c(100,100,100,0,0,0,0,0,100,100,100,100,100,0,0,0,0,100,100,100,0,0,100,100)

因此输出应该 3 ,因为从0开始的值在一段时间内保持在100并返回到0.我的要求是计算此切换发生的次数。我知道rle但这只能给我一定的长度。

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

这看起来足够了

sum(X1[-1] != X1[-length(X1)]) / 2

假设是

  • X1
  • 中只有两个唯一值
  • X1的最后一个元素等于第一个元素,也就是说,它最终会切换回原始状态。

答案 1 :(得分:2)

你可以做点什么,

sum(diff(X1) == 100)
#[1] 3

#Or

min(sum(diff(X1) == 100), sum(diff(X1) == -100))
#[1] 3

答案 2 :(得分:1)

您可以运行rle,然后一次迭代values的三个元素,以查看是否已满足所需条件。

with(rle(X1),
     sum(sapply(3:length(lengths), function(i)
         values[i-2] == 0 & values[i-1] == 100 & values[i] == 0)))
#[1] 2

答案 3 :(得分:0)

通常用于计数n种情况下的开关(数字或字符):

def wrapper(fun,a,b):
    temp = fun(a,b)
    return temp

f(
      foo(),
      bar(),
      wrapper(spam,a,b),
     )

答案 4 :(得分:0)

sum(((np.diff(x)== 100)|(np.diff(x)==-100))

我想这就是答案,对我有用