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-dessus
colnames(tableau) <- c("V1","V2")
# Si le tableau s'appelle data, on peut renommer ses colonnes
data <- colnames(c("nouveau titre","titre nouveau"))
# exemple
data <- data.frame(t3=1:6, titre=rnorm(6)) ; data
colnames(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 Age
Age = tablo$Age
# Exemple
tablo <- data.frame(Age=rpois(20,20), Taille=rnorm(20,170))
Age = tablo$Age ; Taille = tablo$Taille
Age ; Taille
Renommer les lignes
# en reprenant l'exemple ci-dessus
rownames(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-dessus
tableau 3 <- cbind(tableau1, tableau2) # Les colonnes du tableau 2 s'ajoutent au tableau 1 pour donner le tableau 3
tableau 3 <- rbind(tableau1, tableau2) # Les données du tableau 2 s'ajoutent à la suite des données du tableau 1 pour donner le tableau 3
Connaître les niveaux d'une variable de catégories
levels(iris$Species)
colnames(tableau)
# Si le tableau s'appelle file
colnames(file)
rownames(tableau)
head(tableau)
summary(tableau)
attach(tableau)
# Colonne 1
tableau[,1]
# Colonne 2 à 5
tableau[,2:5]
# Toutes les colonnes sauf la 3ème
tableau[,-3]
# Afficher la colonne x du data.frame.tableau
tableau$x
# exemple
toto <- data.frame(t1=1:6, t2=rnorm(6))
colnames(toto)
toto$t1
data(iris) # Ouverture d'un jeu de données nommé iris
liste_à_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 colonnes
Exemple : calculer la médiane de chaque ligne
apply(tableau, 1, median) # 1 permet d'indiquer qu'il s'agit des lignes
Remarque : 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-1
return(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 data
1 NA 1 1
2 NA NA 2
3 3 NA 3
4 4 4 4
5 5 5 5
y
k1 k2 data
1 NA NA 2
2 2 NA 3
3 NA 3 4
4 4 4 5
5 5 5 6
Les tableaux x et y vont être fusionnés selon les critères k1 et k2 :
merge(x, y, by = c("k1","k2")) # NA's match
Ré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.y
1 4 4 4 5
2 5 5 5 6
3 NA NA 2 2
La 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 A1
2 Véronique A2
3 Serge B1
4 Tom A1
Groupe Secteur
1 A1 Usine
2 A2 Bureau
3 B1 Usine
Jointure :
library("dplyr")
left_join(tab1,tab2,by="Groupe")
1 Géraldine A1 Usine
2 Véronique A2 Bureau
3 Serge B1 Usine
4 Tom A1 Usine