2015-02-25 6 views
0

У меня есть вектор, содержащий 0 и 1. Я хочу вернуть максимальное значение количества раз 1, которое появляется последовательно. Напр. если х входной векторМаксимальные последовательные повторы в векторе в R

x <-c(0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1) 

Ожидаемый результат: 3

Моя попытка: Я использую функцию RLE, чтобы сделать эту работу. Вот мой пример кода:

x<-c(0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1) 
y<-rle(x) 
max_repeat <-max(y$lengths) 

В этом случае, я получаю выход как 4 (соответствует 0 вместо 1). Я пытался использовать tapply, чтобы получить доступ к полному выходной РЛЭ, но я не в состоянии извлечь из максимального повторения, соответствующей величины 1.

out <-tapply(y$lengths, y$values, max) 

Это то, что я получаю для отказа:

0 1 
4 3 

Когда я смотрю на структуру out, это «int [1: 2 (1d)] 4 3». У меня недостаточно опыта работы с этими типами переменных. Мне нужно извлечь значение, соответствующее 1, т.е. 3. Любая помощь будет оценена!

Благодаря

+1

Вы, почти, там: 'out [[" 1 "]]' или 'max (y $ lengths [y $ values ​​== 1])' –

+0

ahh! понял. спасибо alexis !. –

ответ

4

Вы можете попробовать это:

x<-c(0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1) 
y<-rle(x) 
max(y$lengths[y$values==1]) 
# 3 

Если вы хотите информацию о каком-либо объекте, здесь у вы можете использовать функцию ул, которая возвращает информацию о том, что содержит любой объект.

1

Я нашел его, как этот =>

x <-c(0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1) 
y=rle(x) 
max(y$lengths[y$values==1]) 

надеюсь, что он соответствует вашим ожиданиям.

+2

Это точно так же, как и другой ответ. –

+0

понял это сейчас, я увидел вопрос и приступил к работе над ним. Когда я наткнулся на подачу, он вернулся и сказал мне, что есть еще один ответ ... получается, что он такой же .. – Gyan

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