计算连续事件

时间:2016-08-01 08:20:18

标签: r xts

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

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))

1 个答案:

答案 0 :(得分: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的次数。