У меня есть вектор, содержащий 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. Любая помощь будет оценена!
Благодарность
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 , которая вернет информацию о том, что содержит какой-либо объект.
Нашел вот так =>
x <-c(0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1)
y=rle(x)
max(y$lengths[y$values==1])
Надеюсь, что он соответствует вашим ожиданиям.
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.