Boolean vektörü verildiğinde, TRUE
'un en uzun sürekli yığınını nasıl bulabilir ve kalan TRUE
değerlerini FALSE
olarak değiştirebilirim?Bir boolean vektöründe en uzun sürekli kesriyi bul
c(FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE)
Boolean vektörü verildiğinde, TRUE
'un en uzun sürekli yığınını nasıl bulabilir ve kalan TRUE
değerlerini FALSE
olarak değiştirebilirim?Bir boolean vektöründe en uzun sürekli kesriyi bul
c(FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE)
İşte bir boolean vektör ardışık TRUE
s her uzun parçalarını vurgular bir yaklaşımdır. Yani, aynı (maks) uzunluğa sahip iki TRUE
parça varsa, her ikisi de çıkışta TRUE
olarak bildirilecektir.
Biz kullanabilir:
with(rle(bool), rep(lengths == max(lengths[values]) & values, lengths))
anlamına gelmektedir:
with(rle(bool), ...)
: çalıştırmalengths == max(lengths[values]) & values
uzunlukları hesaplamak: Her çalışma uzunluk değerleri maksimum akış uzunluğuna eşit olup olmadığını kontrol TRUE
ve ayrıca değerlerin kendisinin olup olmadığını da kontrol edin TRUE
rep(...., lengths)
: sıklıkta kendi çalışma uzunluğu var olarak ortaya çıkan Mantıksal bölümler her tekrarlamakOP'ın test durumu:
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
İkinci test durumu: T ve F aynı maxima:
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
Üçüncü sınama durumu: F, T:
'dan daha fazla parça daha uzuny <- 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
kullanma .rle:
bool = c(TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE)
Nasıl bir vektör gibi alabilirsiniz:
myRle <- rle(bool)$length
rep(myRle == max(myRle), myRle)
OP yapmadım' boole vektör Verilen örnek için
, Bu yaklaşımla olası sorunlara cevap vermek, b ut tam cevap docendodiscimus tarafından önerilen tüm olası sorunları kapsamalıdır. zx8754
Bu uzun genel sekans FALSE
yapılmış olsa bile çalışması gerekir @ ilhamla
Bir dakika bekleyin. Eğer DOĞRULAR'dan daha uzun bir FALSE çalıştırmış olsaydık, bu işe yaramazdı, değil mi? –
@MhairiMcNeill, 'ile birlikte (rle (bool), rep (uzunluk == maks (uzunluk [değerler]) ve değerler, uzunluklar))' daha büyük olabilirlerse, _all_ TRUE'lerin en büyük parçalarını işaretler (eğer birden fazla maxima varsa)). –
Yükseltmeler istemiyorsanız, neden silinmez? – jpmc26
.
runs <- rle(bool)
lengths <- runs$lengths
is_max <- which(lengths == max(lengths[runs$values]) & runs$values)
rep(1:length(lengths) == is_max[1], lengths)
Ah evet. Birden fazla maksimum diziniz olduğunda ikinci bir problem tespit ettim. İlk maksimum diziyi bulmak için şu an olması gerektiğini düşünüyorum. –
TRUE'nin en uzun sürekli zinciri mi demek istiyorsun? –
@MhairiMcNeill Evet – sl1129
Bu, "?? uzunluk kodlaması" işlevini ("wink wink ipucu ipucu)" –