如何快速计算一系列超过一个值的次数?

时间:2014-08-13 15:42:17

标签: r

我在R中有一个离散的累积随机序列:

x<-cumsum(rnorm(100))

绘制时: enter image description here

计算它穿过特定值的次数的最佳方法是什么;在这种情况下,-2?

3 个答案:

答案 0 :(得分:3)

#sample data
set.seed(17)
x<-cumsum(rnorm(100))

我们可以通过减去我们的价值来计算十字架,并查看价值的符号从正面变为负面的频率

target <- 5
idx <- which(diff(sign(x-target))!=0)
print(paste("it crosses", length(idx), "times"))

以及突出显示交叉间隔的结果如何

plot(x, type="l")
abline(h=target, col="green")
abline(v=c(idx,idx+1), col=c("red","blue"), lty=2)

enter image description here

答案 1 :(得分:2)

set.seed(2)
x <- cumsum(rnorm(100))
plot(x, type = "l")
abline(h = 0)

使用rle向量上的x>0函数查找x大于某个值(在本例中为0)的次数。

length(rle(x > 0)$length) - 1
## [1] 6

enter image description here

答案 2 :(得分:0)

也许这会有所帮助。

    x<-cumsum(rnorm(100))

    l1 = x >= 5
    n = length(x)

    temp = cbind.data.frame(l1[-1], l1[-n])
    colnames(temp) = c("l1", "l2")
    temp$val = (temp$l1 +temp$l2)
    sum(which(temp == 1))

这里的策略是创建逻辑和滞后的逻辑绑定 并找到两个逻辑不同的条目(穿过该行)。