Oto podejście, które podkreśli wszystkie najdłuższe kawałki kolejnych TRUE
s w logiczną wektorze. Oznacza to, że jeśli istnieją, powiedzmy, dwie porcje o tej samej (maksymalnej) długości, oba będą zgłaszane jako dane wyjściowe jako TRUE
.
Możemy użyć:
with(rle(bool), rep(lengths == max(lengths[values]) & values, lengths))
co oznacza:
with(rle(bool), ...)
: obliczyć run długości
lengths == max(lengths[values]) & values
: sprawdzić, czy każdy odcinek prowadzony jest równa maksymalnej długości przebiegu gdzie wartości jest TRUE
i sprawdź również, czy same wartości to TRUE
rep(...., lengths)
: powtarzanie wszystkich wynikających logicals tak często, jak jest to własny długość run
Test case OP:
bool <- c(TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE)
with(rle(bool), rep(lengths == max(lengths[values]) & values, lengths))
# [1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE
Drugi przypadek testowy: same maksima dla T i F:
x <- c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE)
with(rle(x), rep(lengths == max(lengths[values]) & values, lengths))
# [1] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Trzecie badanie: F dłużej niż T:
y <- c(TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE)
with(rle(y), rep(lengths == max(lengths[values]) & values, lengths))
# [1] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Czy masz na myśli najdłuższy ciągły łańcuch PRAWDY? –
@MhairiMcNeill Tak – sl1129
To brzmi jak "?" Kodowanie długości biegu "(mrugnięcie podpowiedź do podpowiedzi) –