Страница 1 из 1

Значение с максимальной частотой

Добавлено: 23 июн 2020, 17:00
VistaSV30
Добрый день!

В векторе нужно найти значение с максимальной частотой

Код: Выделить всё

set.seed(1)
x = c(sample(0:5, 1000, T))
table(x)

x
  0   1   2   3   4   5 
170 164 152 174 176 164
Вопрос вроде бы простой, но ни как не получается написать код, который бы по результатам обработки данного вектора вернул бы четверку.
Подскажите, что делать?

Спасибо!

Re: Значение с максимальной частотой

Добавлено: 23 июн 2020, 17:11
antonv
VistaSV30, попробуйте

Код: Выделить всё

which(max(x))
Выражение должно вернуть порядковый номер максимального элемента в векторе.

Re: Значение с максимальной частотой

Добавлено: 23 июн 2020, 18:48
VistaSV30
Извиняюсь, не совсем корректно сформулировал свой вопрос.

В векторе x четвёрка встречается чаще других значений.
table(x) показывает, что в векторе x всего 176 четвёрок.

У меня не получается получить значение 4 из функции table().

Re: Значение с максимальной частотой

Добавлено: 23 июн 2020, 20:38
antonv
VistaSV30,

Код: Выделить всё

getmode <- function(v) {
   uniqv <- unique(v)
   uniqv[which.max(tabulate(match(v, uniqv)))]
}

v <- c(...)

result <- getmode(v)
print(result)

Re: Значение с максимальной частотой

Добавлено: 23 июн 2020, 22:18
VistaSV30
Работает!
Спасибо!

Re: Значение с максимальной частотой

Добавлено: 24 июн 2020, 07:51
nickleb
.. а вот такая "кракозябра" тоже, вроде, как работает:

Код: Выделить всё

as.numeric(names(which(table(x) == max(table(x)))))

Re: Значение с максимальной частотой

Добавлено: 24 июн 2020, 08:32
VistaSV30
nickleb писал(а): 24 июн 2020, 07:51as.numeric(names(which(table(x) == max(table(x)))))
Да, спасибо!