Найти режим вектора в R

  1. Использование пользовательской функции для поиска режима вектора R
  2. Используйте map_dbl, чтобы применить функцию FindMode к каждому столбцу фрейма данных в R

Эта статья объяснит несколько методов, как найти моду вектора в R.

Использование пользовательской функции для поиска режима вектора R

Режим - одно из самых основных статистических понятий, обозначающее максимальное значение встречаемости в наборе значений. В результате это можно наблюдать в разных типах данных, таких как числовые или символьные. В языке R нет встроенной функции для вычисления режима, но мы можем реализовать ее с помощью функций: unique, which.max, tabulate и match. Мы определяем функцию с именем FindMode, которая принимает один аргумент, обозначенный как x. Сначала unique функция вызывается по x и сохраняется в отдельном объекте. unique извлекает из набора неповторяющиеся значения. В качестве первого аргумента он может принимать векторный объект, фрейм данных или массив.

Затем у нас есть несколько связанных функций, начинающихся с match, которые принимают два вектора и возвращают из них вектор совпадений позиций. Функция tabulatee подсчитывает и возвращает количество раз, когда каждое целое число встречается в векторе. Обратите внимание, что возвращаемый вектор содержит счетчик для каждого целого числа, которое меньше или равно максимальному целому числу в векторе аргументов. Наконец, функция which.max находит индекс максимального элемента в целочисленном векторе. Мы можем вызвать функцию FindMode для каждого столбца фрейма данных, используя функцию apply. В этом случае мы объявляем простой целочисленный вектор, который хранится как фрейм данных, а затем передается в функцию apply для вычисления среднего значения.

library(purrr)

FindMode <- function(x) {
  u <- unique(x)
  u[which.max(tabulate(match(x, u)))]
}

x <- c(12, 44, 3, -4.2, 3, 3.2, 54, 4, -11, -8, 2.5)
df <- data.frame(x)
apply(df, 2, FindMode)

Выход:

x
3

В качестве альтернативы, мы можем вызвать функцию FindMode непосредственно во фрейме данных. Следующий пример кода демонстрирует использование набора данных cars, включенного в пакет datasets.

library(purrr)

FindMode <- function(x) {
  u <- unique(x)
  u[which.max(tabulate(match(x, u)))]
}

apply(cars, 2, FindMode)

Выход:

speed  dist
   20    26

Используйте map_dbl, чтобы применить функцию FindMode к каждому столбцу фрейма данных в R

Еще одна полезная функция для нахождения среднего значения для каждого столбца данного фрейма данных - map_dbl, которая является частью пакета purrr, включенного в tidyverse. Обратите внимание, что эти методы нельзя вызывать для векторных объектов.

library(purrr)

FindMode <- function(x) {
  u <- unique(x)
  u[which.max(tabulate(match(x, u)))]
}
x <- c(12, 44, 3, -4.2, 3, 3.2, 54, 4, -11, -8, 2.5)
df <- data.frame(x)

map_dbl(df, FindMode)
map_dbl(cars, FindMode)

Выход:

x
3
speed  dist
   20    26