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 une valeur d'un vecteur en fonction de sa position (indice)
# Récupérer le 3ème élément d'un vecteur x.
x[3]
Récupérer les éléments d'un objet par rapport à une série d'indices
# Récupérer les éléments 3 à 5 d'un vecteur x.
x[3:5]
Filtrer un vecteur en fonction de critères
# 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]
Filtrer un vecteur en fonction de 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]
Récupérer les indices des valeurs sélectionnées en fonction de divers 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]
Trier une liste de valeurs (trier un vecteur)
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
S'affranchir des valeurs vides qui sont représentées par un NA dans le logiciel R - aller plus loin pour ce qui est des valeurs manquantes
# 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)
S'affranchir des valeurs infinies
# 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))