Wir eine Gruppenvariable, indem die Differenz benachbarter Elemente erstellen können, prüfen Sie, ob das nicht gleich 1 ist, erhalten die cumsum
, verwenden tapply
zu Holen Sie sich die length
und sum
den Ausgang.
sum(tapply(int.vec,cumsum(c(TRUE,diff(int.vec) !=1)), FUN=length))
#[1] 10
Oder nutzen table
und sum
sum(table(int.vec,cumsum(c(TRUE,diff(int.vec) !=1))))
#[1] 10
Oder wir split
die "int.vec" mit der Gruppenvariable aus cumsum
abgeleitet (split
ist sehr schnell) und bekommen die length
von jedem list
Element mit lengths
(eine andere schnelle Option) - beigetragen von @ Frank
sum(lengths(split(int.vec, cumsum(c(0,diff(int.vec)>1)))))
HINWEIS: Keine Pakete verwendet. Dies ist hilfreich für die Identifizierung der einzelnen length
jeder Komponente (falls wir das benötigten), indem Sie nur die sum
Wrapper entfernen.
Basierend auf weitere Erkenntnisse aus @ Symbolix-Lösung, die erwartete Ausgabe des OP ist nur der length
des vector
.
NROW(int.vec)
#[1] 10
kann auch verwendet werden. Dies funktioniert auch, wenn wir mit data.frame
arbeiten. Aber, wie ich oben erwähnt habe, scheint es, dass das OP sowohl die length
jedes Intervalls als auch die length
identifizieren muss. Diese Lösung bietet beides.
Sie die ' – akrun
wird dies immer nicht' Länge (int.vec) 'diff' Funktion können Sie verwenden kann? – SymbolixAU
@Symbolix, das ist die beste Antwort für dieses :-) – A5C1D2H2I1M1N2O1R2T1