2016-08-01 7 views
0

Ich habe tägliche Daten für 1 Jahr mit 0 und 1 Werte. Ich möchte monatliche Ereignisse berechnen, es gibt einen fortlaufenden 1 Wert für 3 an mehreren Tagen mit R?Zählen Sie aufeinander folgende Ereignisse

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

Antwort

0

Die letzte Zeile Ihres Codes löst einen Fehler für mich aus, wenn ich xts_0.9-7 verwende.

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 

Das ist jedoch einfach zu beheben. Sie müssen nur x != 0 in as.logical wickeln.

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 

Das scheint wie die Ausgabe, die Sie erwarten. Die Häufigkeit, mit der 3 oder mehr aufeinanderfolgende Tage den Wert 1 haben.

Verwandte Themen