2016-08-01 79 views
0

我有1年的每日数据有0和1的值。我想计算每月的事件,使用R的更多天有3个连续的1个值?连续事件计数

set.seed(123) 
abts1 <- sample(0:1, 366, replace=TRUE) 

library(xts) 
d16 <- seq(as.Date("2016-01-01"), as.Date("2016-12-31"), 1) 
ax16 <- as.Date(d16,"%y-%m-%d") 
abts12 <- xts(abts1, ax16) 
# but it gives events for complete period, not as monthly. 
apply.monthly(abts12, function(x) sum(with(rle(c(x!=0)), lengths*values)>=3)) 

回答

0

当我使用xts_0.9-7时,代码的最后一行会为我引发一个错误。

R> apply.monthly(abts12, function(x) sum(with(rle(x!=0), lengths*values)>=3)) 
Error in rle(x != 0) : 'x' must be a vector of an atomic type 

虽然这很容易解决。您只需要将x != 0换成as.logical即可。

R> apply.monthly(abts12, function(x) sum(with(rle(as.logical(x!=0)), lengths*values)>=3)) 
      [,1] 
2016-01-31 2 
2016-02-29 1 
2016-03-31 3 
2016-04-30 2 
2016-05-31 1 
2016-06-30 2 
2016-07-31 3 
2016-08-31 3 
2016-09-30 2 
2016-10-31 3 
2016-11-30 0 
2016-12-31 2 

这看起来像你期望的输出。连续3天或更多天的值为1的次数。