2016-04-01 10 views
2

gezählt wird. Beim Versuch, die Anzahl der TRUE Werte in einem Vektor zu finden, stieß ich auf die erste Google hit. Dies entspricht jedoch nicht vollständig meinen Anforderungen. Ich bin interessiert, die Anzahl der TRUE Werte in einem Vektor vor der ersten FALSE wenn überhaupt zu finden. Ich habe einen Vektor a <- c(TRUE,TRUE,TRUE,FALSE,TRUE, TRUE) und möchte alle TRUE Werte vor dem FALSE finden, so wird Ausgabe drei sein. Bitte beachten Sie, dass es auch funktionieren sollte, wenn nur TRUE Werte im Vektor sind.Wie die Anzahl der TRUE-Werte in einem logischen Vektor vor FALSE

Antwort

8

Hier ist ein kurzer Weg:

sum(cumprod(a)) 
# [1] 3 

wo cumprod eine kumulative Produkt (von Nullen und Einsen in diesem Fall) gibt; so beseitigt es alle TRUE 's nach dem ersten FALSE.

+0

So schön !! Danke –

2

unten Anweisung auch easyly wir bekommen ...

which.min(a)-1 
+0

... etwas schneller auf großen Vektoren als die Lösung basierend auf 'cumprod()'. Für ein bewusst schlechtes Beispiel vergleichen Sie die beiden Lösungen auf: 'a <- rep (c (WAHR, FALSCH, WAHR), c (42, 1, 1e8))'. –

+0

Diese Methode funktioniert nicht für einen Vektor, der nur 'TRUE' Werte enthält. Arbeiten nur für eine Kombination von "TRUE, FALSE" –

+0

OK, dann brauchen Sie eine andere 'if()' Prüfung danach. Wenn das Ergebnis "0" ist, müssen Sie es in "Länge (a)" ändern. Wenn Sie dies sehr oft oder auf sehr große Daten anwenden müssen, ist das Timing immer noch besser. Wenn Sie dies nur als eine Convenience-Funktion benötigen, könnte die auf "cumprod()" basierende Ein-Zeilen-Lösung schneller tippen/erinnern. –