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

 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 для доступа к полному выводу rle, но мне не удалось извлечь максимальное повторение, соответствующее значению 1.

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

Вот за что я получаю:

0 1
4 3

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

Благодарность

r
0
Prakhar Mehrotra 26 Фев 2015 в 02:16

2 ответа

Лучший ответ

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

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

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

5
wythagoras 4 Апр 2016 в 16:53

Нашел вот так =>

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

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

1
Raghav 25 Фев 2015 в 23:34