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
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
.
unten Anweisung auch easyly wir bekommen ...
which.min(a)-1
... 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))'. –
Diese Methode funktioniert nicht für einen Vektor, der nur 'TRUE' Werte enthält. Arbeiten nur für eine Kombination von "TRUE, FALSE" –
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. –
So schön !! Danke –