Filtrer, trier des données avec R

Besoin de simuler des données ? Voir la page : Comment simuler des données avec R

1- Filtrer les données par indice ou selon un ou plusieurs critère(s)

# Récupérer le 3ème élément d'un vecteur x.

x[3] 

# Récupérer les éléments 3 à 5 d'un vecteur x.

x[3:5] 

> supérieur à >= supérieur ou égal à< inférieur à<= inférieur ou égal à== égal à!= différent de

# Exemple : soit age une liste de valeurs (un vecteur)

x = c(1,3,5,3,2,1,4,6,4,7,5,4,3)

# Récupérer les éléments 2 à 6

x[2:6]

# Récupérer les éléments 3 et 5 d'un vecteur x.

x[c(3,5)]

# Récupérer les valeurs de x supérieures à 20.

x[x>20]

# Récupérer les valeurs de x où x est égale à 21.

x[x==21]

# Afficher les éléments d'une liste x dont les valeurs sont différents d'une valeur y. Par exemple, dans le cas où y = 5 :

x[x!=5] 

& "et" permet de combiner plusieurs critères| "ou" permet de combiner plusieurs critères

# Soit 3 listes : les ages, les sexes et les poids

age = c(20,30,40,15,22,24,36,38)

sexe = c("F","M","F","M","F","M","F","M")

poids =c(75,76,73,72,64,76,73,72)

# Récupérer les valeurs d'âge supérieures à 20 et inférieures à 30.

age[age>20&age<30]

# Récupérer le poids pour ceux qui ont un âge supérieur à 25 et qui sont du sexe féminin

poids[age>25&sexe=="F"]

# Récupérer les valeurs d'âge inférieures à 20 ou supérieures à 30.

age[age<20|age>30] 

commande which (donne les indices en fonctions de critères)

# Récupérer les indices des éléments supérieurs à 20.

indices <- which(x>20)

# Afficher les éléments d'une liste x dont les indices sont répertoriés dans une liste indices

x[indices]

# Afficher les éléments d'une liste x dont les indices ne sont par répertoriées dans une liste indices

x[-indices] 

 

Commande sortCommande order

x = c(1,4,2,5,10,4,2,11) # exemples de listes de valeurs

y = c(20,12,13,5,10,4,16,11) # exemples de listes de valeurs

# Trier x dans l'ordre croissant

sort(x)

# Trier x dans l'ordre décroissant

sort(x, decreasing=T)

# Récupérer les indices de x qui permettent son tri

order(x)

# Trier x en fonction de l'ordre de tri de y en sens décroissant

x[order(y,decreasing=T)] 

# Obtenir l'ordre des valeurs si elles devaient être triées

rank(z)

2- Données manquantes et données infinies

mots clefs : valeur manquante - valeurs manquantes - valeur vide -filtrer les NA - supprimer les NA

# Dans le cas où un vecteur contient des indices pour lequel il ne correspond pas de valeurs, on peut afficher toutes les valeurs identifiées de ce vecteur. cf. exemple :

# Voici la liste des poids de 4 de ces 5 personnes, la personne âgée de 72 a refusé de donner son poids.

poids <- c(35, 70, 80, 65, NA)

# Remarque : NA, veut dire que nous ne disposons pas de la valeur.

# Commande pour afficher toutes les valeurs existantes du vecteur poids

poids[!is.na(poids)]

#Pour calculer une moyenne sans tenir compte des valeurs manquantes

mean(poids, na.rm = TRUE)  

mots clefs : valeurs finies, infinies, Inf, -Inf

# Dans le cas où un vecteur contient des valeurs infinies (comme après une division par 0)...

poids <- c(35, 70, 80, 65, Inf, -Inf)

# Remarque : Inf, valeur infinie positive ou négative

# Commande pour afficher toutes les valeurs non infinies

poids[is.finite(poids)]

# Commande pour vérifier la présence de données infinies

any(!is.finite(poids)) # Si TRUE, il y a au moins une donnée infinie.

3- Intersection, union et différences entre deux vecteurs

x <- 1:10 ; y <- 5:15

intersect(x,y)

setdiff(x,y)

union(x,y)

match() - Indices de réordonnement : comment trier un tableau (ou un vecteur) en organisant de sorte à ce qu'une colonne soit dans le même ordre que la colonne d'un autre tableau : math()

Exemple : 

J'ai un tableau qui contient des âges et des noms

tableau <- data.frame(age = c(20,32,18,54),noms=c("géraldine","lucie","jessica","lana"))


  age      noms

1  20 géraldine

2  32     lucie

3  18   jessica

4  54      lana

Je souhaite ordonner ce tableau dans l'ordre de cette liste :

liste <- c("lucie","géraldine","jessica","lana")

indices <- match(liste,tableau$noms) ; indices # Renvoie les indices qui permettent de trier la colonne noms dans le même ordre que liste

On affiche ainsi le tableau trié :

tableau[indices,]

  age      noms

2  32     lucie

1  20 géraldine

3  18   jessica

4  54      lana


4- Filtrer et extraire les données d'une data.frame, d'un tableau

La commande subset() permet d'extraire les données d'un tableau selon ses conditions.

Exemple : extraire les colonnes Sepal.Length et Sepal.Width des données iris pour lesquelles Sepal.Length est supérieur à 7.

data(iris)

View(iris)

subset(iris, Sepal.Length > 7, select = c(Sepal.Length, Sepal.Width))


Exercice pour s'entraîner

Exercice : Prise en main de R