Lorsque plusieurs paramètres sont susceptibles d'agir sur l'obtention de résultats, il faut faire des data.frames. Il s'agit de tableaux à n colonnes de même taille ou non. Ces tableaux sont ceux que l'on charge par défaut avec la fonction read.table().
vecteur1 <- c(1:10) ; vecteur2 <- c(2:11)tableau <- data.frame(x = vecteur1, y = vecteur2) # en reprenant l'exemple ci-dessuscolnames(tableau) <- c("V1","V2")# Si le tableau s'appelle data, on peut renommer ses colonnesdata <- colnames(c("nouveau titre","titre nouveau"))# exempledata <- data.frame(t3=1:6, titre=rnorm(6)) ; datacolnames(data) = c("nouveau titre","titre nouveau") ; data# On peut aussi simplifier le nom des colonnes du tableau pour pouvoir appeler le contenu d'une colonne sans utiliser le nom du fichier.# Pour un tableau de nom tablo et une colonne nommée AgeAge = tablo$Age# Exempletablo <- data.frame(Age=rpois(20,20), Taille=rnorm(20,170))Age = tablo$Age ; Taille = tablo$TailleAge ; Taille Renommer les lignes
# en reprenant l'exemple ci-dessusrownames(tableau) <- c("a","b","c","d","e","f","g","h","i","j")Ajouter des lignes ou des colonnes en agglomérant des tableaux dataframes
# en reprenant l'exemple ci-dessustableau 3 <- cbind(tableau1, tableau2) # Les colonnes du tableau 2 s'ajoutent au tableau 1 pour donner le tableau 3tableau 3 <- rbind(tableau1, tableau2) # Les données du tableau 2 s'ajoutent à la suite des données du tableau 1 pour donner le tableau 3Connaître les niveaux d'une variable de catégories
levels(iris$Species)colnames(tableau)# Si le tableau s'appelle filecolnames(file)rownames(tableau) head(tableau) summary(tableau) attach(tableau) # Colonne 1tableau[,1]# Colonne 2 à 5tableau[,2:5]# Toutes les colonnes sauf la 3èmetableau[,-3] # Afficher la colonne x du data.frame.tableautableau$x# exempletoto <- data.frame(t1=1:6, t2=rnorm(6))colnames(toto)toto$t1 data(iris) # Ouverture d'un jeu de données nommé irisliste_à_afficher <- c("Species", "Sepal.Length")indices <- which(colnames(iris) %in% liste_à_afficher)iris[,indices]Exemple : calculer la moyenne de chaque colonne
apply(tableau, 2, mean) # 2 permet d'indiquer qu'il s'agit des colonnesExemple : calculer la médiane de chaque ligne
apply(tableau, 1, median) # 1 permet d'indiquer qu'il s'agit des lignesRemarque : on peut ainsi créer n'importe quelle fonction de son choix et l'appliquer colonne par colonne ou ligne par ligne
ma_fonction <- function(vector = c()) {vector <- vector*vector-1return(vector)}tableau <- data.frame((c(1:10)))apply(tableau,1,ma_fonction)La fonction by() déjà présentée sur ce site, permet aussi d'appliquer un calcul en fonction des catégories d'une ou plusieurs colonnes :
data(iris)by(iris[,1],iris[,5],mean) # Faire la moyenne de iris[,1] en fonction des catégories de iris[,5]merge() permet des fusions de tableaux selon des critères et des dimensions. Voici un exemple simple mais merge() va beaucoup plus loin !
x <- data.frame(k1 = c(NA,NA,3,4,5), k2 = c(1,NA,NA,4,5), data = 1:5)y <- data.frame(k1 = c(NA,2,NA,4,5), k2 = c(NA,NA,3,4,5), data = 2:6)x
k1 k2 data1 NA 1 12 NA NA 23 3 NA 34 4 4 45 5 5 5y
k1 k2 data1 NA NA 22 2 NA 33 NA 3 44 4 4 55 5 5 6Les tableaux x et y vont être fusionnés selon les critères k1 et k2 :
merge(x, y, by = c("k1","k2")) # NA's matchRésultats : les lignes de x et y qui n'ont pas trouvé de correspondance pour k1 et k2 ont été supprimées
k1 k2 data.x data.y1 4 4 4 52 5 5 5 63 NA NA 2 2La jointure entre des dataframes est facile à réaliser avec la fonction left_join() de la librairie
Mots clefs : tidyverse, join, dplyr...
Imaginons 2 tableaux :
On va pouvoir joindre ces deux tableaux pour savoir dans quel secteur va aller chaque personne.
tab1 <- data.frame(Personne = c("Géraldine","Véronique","Serge","Tom"),Groupe=c("A1","A2","B1","A1"))tab2 <- data.frame(Groupe =c("A1","A2","B1"),Secteur=c("Usine","Bureau","Usine"))Les deux tableaux :
1 Géraldine A12 Véronique A23 Serge B14 Tom A1 Groupe Secteur1 A1 Usine2 A2 Bureau3 B1 UsineJointure :
library("dplyr")left_join(tab1,tab2,by="Groupe")1 Géraldine A1 Usine2 Véronique A2 Bureau3 Serge B1 Usine4 Tom A1 Usine