2016-10-18 2 views
0

У меня есть булев вектор, полученный из временного ряда. Он в основном выглядит так: c (true, false, true, true, false, false, false, true, true ...).подсчет числа истинных/talse периодов в r

Я хочу подсчитать периоды, в которых вектор является истинным. Пример: для такого вектора: c (true, true, false, true) было бы 2 (1 длинный истинный период в начале, 1 короткий в конце).

вектор может содержать НО в начале.

Я думал, что-то вроде:

aaa <- c(NA,F,T,T,T,F)  
for(j in 1:(length(aaa)-1)){ 
    if(aaa[j]!=aaa[j+1]){ 
    # add a counter that returns [1] 
    } 
} 

================================= ================

редактировать: Это работает для меня:

data.frame("#"=unlist(rle(aaa)[1]),"length"=unlist(rle(aaa)[2])) 
+2

Что вы ожидаете от c (TRUE, NA, TRUE), чтобы дать вам? Ответ на ваш запрос, скорее всего, будет использоваться для кодирования длины пробега, см. '? Rle' – Miff

+0

. Пожалуйста, отредактируйте сообщение, чтобы включить комментарий, а также включить фиктивный код, чтобы выделить 1) вектор ввода 2) вектор вывода 3) что вы пробовали до сих пор. Пожалуйста, посмотрите [как опубликовать воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – OdeToMyFiddle

+0

@Miff: c (TRUE, NA , TRUE) должен возвращать 2 – enroute

ответ

1

Как об этом:

aaa[is.na(aaa)] <- FALSE 
sum(rle(aaa)$values) 

Преобразовать NA s в FALSE и посмотреть, сколько значений TRUE есть в кодировке длины прогона (TRUE хранится как 1, FALSE как ноль).

+0

работает отлично. Спасибо! – enroute

Смежные вопросы