Нахождение числа, которое повторяется последовательно больше всего в векторе - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть следующий вектор:

essaie <- "23690,55050,127789,64253,130127,63093,63093,63093,108374,63093,63093"
essaie_z <- c(as.numeric(unlist(strsplit(essaie, ","))))

Я хочу знать, какое число повторяется последовательно и сколько раз оно повторяется. В основном, я хочу знать:

Число, которое повторяется наиболее последовательно: 63093 Сколько раз: 3

Как я могу сделать это в r?

спасибо,

Ответы [ 2 ]

4 голосов
/ 07 ноября 2019

Вы можете использовать функцию rle :

runs <- rle(essaie_z)
max(runs$lengths)
# [1] 3
runs$values[which.max(runs$lengths)]
# [1] 63093

Пояснение rle обозначает кодирование длины серии . Он сообщает о прогонах в данных, а также о продолжительности этих прогонов, возвращая результат в виде списка:

> rle(essaie_z)
Run Length Encoding
  lengths: int [1:8] 1 1 1 1 1 3 1 2
  values : num [1:8] 23690 55050 127789 64253 130127 63093 108374 63093

То, что вы запрашиваете, - это значение, которое соответствует самому длинному прогону.

1 голос
/ 07 ноября 2019

Вот альтернатива,

i1 <- strsplit(essaie, ',')[[1]]
l1 <- split(i1, cumsum(c(TRUE, diff(as.numeric(i1)) != 0)))
l1[which.max(lengths(l1))]
#$`6`
#[1] "63093" "63093" "63093"

И чтобы получить длину,

length(l1[which.max(lengths(l1))][[1]])
#[1] 3

Не уверен, как вы хотите, чтобы ваш вывод.

 paste0('value: ', unique(l1[which.max(lengths(l1))][[1]]), ', Repetition: ', length(l1[which.max(lengths(l1))][[1]]))
#[1] "value: 63093, Repetition: 3"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...