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

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

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

Сообщение VistaSV30 » 23 июн 2020, 17:00

Добрый день!

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

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

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
Вопрос вроде бы простой, но ни как не получается написать код, который бы по результатам обработки данного вектора вернул бы четверку.
Подскажите, что делать?

Спасибо!
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

Аватара пользователя
antonv
Активный участник
Сообщения: 229
Зарегистрирован: 29 ноя 2016, 10:44
Репутация: 114
Откуда: Санкт-Петербург

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

Сообщение antonv » 23 июн 2020, 17:11

VistaSV30, попробуйте

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

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

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

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

Сообщение VistaSV30 » 23 июн 2020, 18:48

Извиняюсь, не совсем корректно сформулировал свой вопрос.

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

У меня не получается получить значение 4 из функции table().
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

Аватара пользователя
antonv
Активный участник
Сообщения: 229
Зарегистрирован: 29 ноя 2016, 10:44
Репутация: 114
Откуда: Санкт-Петербург

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

Сообщение antonv » 23 июн 2020, 20:38

VistaSV30,

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

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

v <- c(...)

result <- getmode(v)
print(result)

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

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

Сообщение VistaSV30 » 23 июн 2020, 22:18

Работает!
Спасибо!
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

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

Сообщение nickleb » 24 июн 2020, 07:51

.. а вот такая "кракозябра" тоже, вроде, как работает:

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

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

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

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

Сообщение VistaSV30 » 24 июн 2020, 08:32

nickleb писал(а):
24 июн 2020, 07:51
as.numeric(names(which(table(x) == max(table(x)))))
Да, спасибо!
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость