Trouver le mode d'un vecteur dans R

Jinku Hu 30 janvier 2023
  1. Utiliser la fonction personnalisée pour trouver le mode d’un vecteur R
  2. Utilisez map_dbl pour appliquer la fonction FindMode à chaque colonne de bloc de données dans R
Trouver le mode d'un vecteur dans R

Cet article expliquera plusieurs méthodes pour trouver un mode d’un vecteur dans R.

Utiliser la fonction personnalisée pour trouver le mode d’un vecteur R

Le mode est l’un des concepts statistiques les plus élémentaires indiquant la valeur d’occurrence maximale dans un ensemble de valeurs. En conséquence, il peut être observé dans différents types de données, tels que numériques ou basés sur des caractères. Le langage R n’a pas de fonction intégrée pour calculer le mode, mais nous pouvons l’implémenter en utilisant les fonctions : unique, which.max, tabulate et match. Nous définissons une fonction nommée FindMode qui prend un argument noté x. Dans un premier temps, la fonction unique est appelée sur x et stockée dans un objet séparé. unique extrait les valeurs non dupliquées de l’ensemble. Il peut prendre un objet vectoriel, une DataFrame ou un tableau comme premier argument.

Ensuite, nous avons plusieurs fonctions chaînées commençant par match qui prend deux vecteurs et renvoie un vecteur de correspondances de position à partir d’eux. La fonction tabulate compte et renvoie le nombre de fois où chaque entier apparaît dans un vecteur. Notez que le vecteur renvoyé contient un nombre pour chaque entier inférieur ou égal à l’entier maximum dans le vecteur d’argument. Enfin, la fonction which.max trouve l’indice de l’élément maximum dans le vecteur entier. Nous pouvons invoquer la fonction FindMode sur chaque colonne du bloc de données en utilisant la fonction apply. Dans ce cas, nous déclarons un simple vecteur entier stocké sous forme de DataFrame puis passé à la fonction apply pour calculer la moyenne.

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)

Production:

x
3

Alternativement, nous pouvons appeler la fonction FindMode directement sur la DataFrame. L’exemple de code suivant illustre l’utilisation avec le jeu de données cars inclus dans le package datasets.

library(purrr)

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

apply(cars, 2, FindMode)

Production:

speed  dist
   20    26

Utilisez map_dbl pour appliquer la fonction FindMode à chaque colonne de bloc de données dans R

Une autre fonction utile pour trouver la moyenne pour chaque colonne de la DataFrame donnée est map_dbl, qui fait partie du package purrr inclus dans le tidyverse. Notez que ces méthodes ne doivent pas être appelées sur les objets vectoriels.

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)

Production:

x
3
speed  dist
   20    26
Auteur: 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