我们假设我们有一个反映一系列二进制信号的数据集 - " 1"或" 0"在一段时间内。目标是测量1的连续实例,并总计总和。因此,例如,如果连续四次发生1次,则累积信号在第四时间段内将为4。如果下一个周期 - 第五个周期 - 为0,则计数器重置直到/如果1信号返回。我正在寻找一种方法来记录连续1s实例的滚动频率的等价物。我尝试过循环和apply(),但似乎无法找到合适的混音。任何建议将不胜感激。作为测试,让我们创建一些虚假数据。关于如何使用R来解决这个问题的任何想法?谢谢!
library(xts)
set.seed(5)
x <- xts(cbind(sample(0:1,50,replace=T)), order=Sys.Date()-100 + 1:50)
> head(x)
[,1]
2014-08-26 0
2014-08-27 1
2014-08-28 1
2014-08-29 0
2014-08-30 0
2014-08-31 1
答案 0 :(得分:1)
使用ave
的另一种方法:
cbind(x, newCol = ave(x, cumsum(c(FALSE, (as.logical(diff(x)))[-1])),
FUN = function(i) seq_along(i) * i))
结果:
..1 newCol
2014-08-26 0 0
2014-08-27 1 1
2014-08-28 1 2
2014-08-29 0 0
2014-08-30 0 0
2014-08-31 1 1
2014-09-01 1 2
2014-09-02 1 3
2014-09-03 1 4
2014-09-04 0 0
.
.
.