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. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 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. 1
  2. 5
  3. 2
$utilisateur
'Mike'
$new
TRUE

Puisque la liste un vecteur, on peut alors extraire avec les crochets []

x[1]
$taille =
  1. 1
  2. 5
  3. 2
x[[1]]
  1. 1
  2. 5
  3. 2
x$taille
  1. 1
  2. 5
  3. 2
x$utilisateur
'Mike'

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
A data.frame: 3 × 3
villesPopulationvillage
<chr><dbl><lgl>
Montréal1942044FALSE
Québec 585485 TRUE
Laval 430077 TRUE

Si l’on vérifie les attributs de ce data frame

attributes(donnees_ville)
$names
  1. 'villes'
  2. 'Population'
  3. 'village'
$class
'data.frame'
$row.names
  1. 1
  2. 2
  3. 3

ça nous donne les étiquettes des colonnes, le nom de colonnes (numéros) et la classe

 donnees_ville[,1]
  1. 'Montréal'
  2. 'Québec'
  3. 'Laval'
 donnees_ville[,2]
  1. 1942044
  2. 585485
  3. 430077
 donnees_ville[2,1]
'Québec'

Ou par nom;

donnees_ville$Population
  1. 1942044
  2. 585485
  3. 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
A data.frame: 3 × 3
villesPopulationvillage
<chr><dbl><lgl>
Montréal1942044FALSE
Québec 585485 TRUE
Laval 430077 TRUE
 donnees_ville$villes   
  1. 'Montréal'
  2. 'Québec'
  3. '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)
'data.frame'
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