Arrays, listes & data frames#
Les tableaux (arrays)#
Les tableaux sont une généralisation des matrices. Le nombre de dimensions d’un tableau est égal à la longueur de l’attribut dim
. Sa classe est « array »
x<-array(1:24, dim=c(3,4,2))
x
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
Les tableaux sont un cas spécial des matrices. Ils sont comme des vecteurs ou des matrices, à l’exception d’avoir des attributs additionnels.
Listes#
Les listes sont un type de vecteur spécial qui peut être composé d’élément ayant n’importe laquelle classe (numérique, string ou booléen).
(x <- list(taille = c(1, 5, 2), utilisateur = "Mike", new = TRUE))
- $taille
-
- 1
- 5
- 2
- $utilisateur
- 'Mike'
- $new
- TRUE
Puisque la liste un vecteur, on peut alors extraire avec les crochets []
x[1]
- 1
- 5
- 2
x[[1]]
- 1
- 5
- 2
x$taille
- 1
- 5
- 2
x$utilisateur
Data Frames#
Un Data Frame est une liste de vecteurs de même longueur. Conceptuellement, c’est une matrice dont les lignes correspondent aux variables explicatives, et les lignes sont les valeurs mesurées de ces variables.
villes <-c("Montréal", "Québec", "Laval")
Population <-c(1942044, 585485, 430077)
village <-c(F,T,T)
donnees_ville <-data.frame(villes, Population, village)
donnees_ville
villes | Population | village |
---|---|---|
<chr> | <dbl> | <lgl> |
Montréal | 1942044 | FALSE |
Québec | 585485 | TRUE |
Laval | 430077 | TRUE |
Si l’on vérifie les attributs de ce data frame
attributes(donnees_ville)
- $names
-
- 'villes'
- 'Population'
- 'village'
- $class
- 'data.frame'
- $row.names
-
- 1
- 2
- 3
ça nous donne les étiquettes des colonnes, le nom de colonnes (numéros) et la classe
donnees_ville[,1]
- 'Montréal'
- 'Québec'
- 'Laval'
donnees_ville[,2]
- 1942044
- 585485
- 430077
donnees_ville[2,1]
Ou par nom;
donnees_ville$Population
- 1942044
- 585485
- 430077
Remarquez que les villes ne s’affichent pas entre guillemets comme des strings, mais plutôt comme des levels
, Si l’on voulait les avoir en strings, il faut ajouter l’argument stringAsFactors=F
donnees_ville <-data.frame(villes, Population, village, stringsAsFactors=F)
donnees_ville
villes | Population | village |
---|---|---|
<chr> | <dbl> | <lgl> |
Montréal | 1942044 | FALSE |
Québec | 585485 | TRUE |
Laval | 430077 | TRUE |
donnees_ville$villes
- 'Montréal'
- 'Québec'
- 'Laval'
Une fonction très utile afin d’avoir un résumé sur les éléments du df
str(donnees_ville)
'data.frame': 3 obs. of 3 variables:
$ villes : chr "Montréal" "Québec" "Laval"
$ Population: num 1942044 585485 430077
$ village : logi FALSE TRUE TRUE
df<-donnees_ville
summary(df)
villes Population village
Length:3 Min. : 430077 Mode :logical
Class :character 1st Qu.: 507781 FALSE:1
Mode :character Median : 585485 TRUE :2
Mean : 985869
3rd Qu.:1263764
Max. :1942044
On se rappelle des données Cars93
, ce sont des données sous format df. Chargeons-les afin de travailler avec quelques exemples.
require(MASS)
Loading required package: MASS
data(Cars93)
class(Cars93)
str(Cars93)
'data.frame': 93 obs. of 27 variables:
$ Manufacturer : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...
$ Model : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...
$ Type : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...
$ Min.Price : num 12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ...
$ Price : num 15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ...
$ Max.Price : num 18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ...
$ MPG.city : int 25 18 20 19 22 22 19 16 19 16 ...
$ MPG.highway : int 31 25 26 26 30 31 28 25 27 25 ...
$ AirBags : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ...
$ DriveTrain : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ...
$ Cylinders : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ...
$ EngineSize : num 1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ...
$ Horsepower : int 140 200 172 172 208 110 170 180 170 200 ...
$ RPM : int 6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ...
$ Rev.per.mile : int 2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ...
$ Man.trans.avail : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ...
$ Fuel.tank.capacity: num 13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ...
$ Passengers : int 5 5 5 6 4 6 6 6 5 6 ...
$ Length : int 177 195 180 193 186 189 200 216 198 206 ...
$ Wheelbase : int 102 115 102 106 109 105 111 116 108 114 ...
$ Width : int 68 71 67 70 69 69 74 78 73 73 ...
$ Turn.circle : int 37 38 37 37 39 41 42 45 41 43 ...
$ Rear.seat.room : num 26.5 30 28 31 27 28 30.5 30.5 26.5 35 ...
$ Luggage.room : int 11 15 14 17 13 16 17 21 14 18 ...
$ Weight : int 2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ...
$ Origin : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ...
$ Make : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ...
On voit que nous avons 93 observations avec 27 variables