我有一個資料框,每列都有布爾資料。我想知道當有連續的?? FALSE 值時每個周期的長度(計數),但如果連續不超過 10 個原始值,則兩者之間可能有 TRUE 值。如果一行中有超過 10 個 TRUE 值,則計數應從下一個 FALSE 值的 0 開始。最終,我希望獲得每列的此類周期數和每個周期的長度。我知道有很多關于查找連續 TRUE 值數量的帖子,但沒有關于使用條件的可能性。
我嘗試將 rleid 函式與 data.table 包中的 rowid 一起使用,但我得到的只是連續的 TRUE 值。這是我用來測驗隨機向量的代碼:
rowid(rleid(a))*a
從那里我被困住了。
理想情況下來自向量
a <- c(FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE,TRUE, TRUE,TRUE, TRUE,TRUE, TRUE, FALSE, FALSE)
我想得到一個向量:9, 2
uj5u.com熱心網友回復:
用 NA 替換 TRUE 值,如果有 9 個或更少,則用 false 填充 NA,然后用 TRUE 替換 NA。然后使用 rle。
library(magrittr)
library(zoo)
a %>%
replace(., ., NA) %>%
na.locf0(maxgap = 9) %>%
replace(., is.na(.), TRUE) %>%
rle %>%
with(lengths[!values])
## [1] 9 2
uj5u.com熱心網友回復:
只需使用rle并破解結果即可將小于 10 的序列設定TRUE為FALSE. 不清楚您想要的輸出,但您可以嘗試以下操作:
r<-rle(a)
r$values[r$lengths<10 & r$values==TRUE]<-FALSE
(r2<-rle(inverse.rle(r)))
#Run Length Encoding
# lengths: int [1:3] 9 10 2
# values : logi [1:3] FALSE TRUE FALSE
r2$lengths[!r2$values]
#[1] 9 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521644.html
標籤:r
