Ecco un approccio che metterà in evidenza tutti i pezzi più lunghi della consecutivi TRUE
s in un vettore booleano. Ciò significa che se ci sono, ad esempio, due blocchi TRUE
della stessa lunghezza (massima), entrambi verranno riportati come TRUE
nell'output.
Possiamo usare:
with(rle(bool), rep(lengths == max(lengths[values]) & values, lengths))
che significa:
with(rle(bool), ...)
: calcolare il tirature
lengths == max(lengths[values]) & values
: verificare se ogni run length è uguale alla lunghezza massima corsa in cui i valori sono TRUE
e controllare anche se i valori stessi sono TRUE
rep(...., lengths)
: ripetere ciascuno dei Logicals risultanti più spesso il proprio tiratura
caso di test di 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
Secondo caso di test: stessi massimi per T e 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
Terzo test case: F chunk più lungo di 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
Vuoi dire la catena continua più lunga di VERO? –
@MhairiMcNeill Sì – sl1129
Questo suona come la codifica della lunghezza di esecuzione "??" (wink wink hint hint) –