Trova la modalità di un vettore in R

Jinku Hu 30 gennaio 2023
  1. Usa la funzione personalizzata per trovare la modalità di un vettore R
  2. Usa map_dbl per applicare la funzione FindMode a ciascuna colonna del frame di dati in R
Trova la modalità di un vettore in R

Questo articolo spiegherà diversi metodi su come trovare una modalità di un vettore in R.

Usa la funzione personalizzata per trovare la modalità di un vettore R

La modalità è uno dei concetti statistici più elementari che denota il valore massimo di occorrenza in un insieme di valori. Di conseguenza, può essere osservato in diversi tipi di dati, ad esempio numerici o basati su caratteri. Il linguaggio R non ha una funzione integrata per il calcolo della modalità, ma possiamo implementarla utilizzando le funzioni: unique, which.max, tabulate e match. Definiamo una funzione denominata FindMode che accetta un argomento indicato come x. All’inizio, la funzione unique viene chiamata su x e memorizzata in un oggetto separato. unique estrae i valori non duplicati dall’insieme. Può prendere un oggetto vettoriale, un frame di dati o un array come primo argomento.

Quindi, abbiamo più funzioni concatenate che iniziano con match che prende due vettori e restituisce un vettore di corrispondenze di posizione da essi. La funzione tabulate conta e restituisce il numero di volte in cui ogni numero intero appare in un vettore. Si noti che il vettore restituito contiene un conteggio per ogni numero intero minore o uguale all’intero massimo nel vettore dell’argomento. Infine, la funzione which.max trova l’indice dell’elemento massimo nel vettore intero. Possiamo invocare la funzione FindMode su ogni colonna del frame di dati utilizzando la funzione apply. In questo caso, dichiariamo un semplice vettore intero memorizzato come frame di dati e poi passato alla funzione apply per calcolare la media.

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)

Produzione:

x
3

In alternativa, possiamo chiamare direttamente la funzione FindMode sul frame di dati. Il seguente codice di esempio dimostra l’utilizzo con il set di dati cars incluso nel pacchetto datasets.

library(purrr)

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

apply(cars, 2, FindMode)

Produzione:

speed  dist
   20    26

Usa map_dbl per applicare la funzione FindMode a ciascuna colonna del frame di dati in R

Un’altra funzione utile per trovare la media per ogni colonna del dato frame di dati è map_dbl, che fa parte del pacchetto purrr incluso nel tidyverse. Notare che questi metodi non devono essere chiamati sugli oggetti vettoriali.

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)

Produzione:

x
3
speed  dist
   20    26
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook