Le logiciel R est un langage dédié à la statistique. Celui-ci est interprété (i.e. exécuté à la volée). Pour simplifier son utilisation, il est possible d’écrire des scripts contenant plusieurs commandes à exécuter. Il a l’avantage d’être open source, et surtout d’être très utilisé par la communauté scientifique. Toute nouvelle méthode statistique a très rapidement une implémentation dans ce langage, ce qui n’est pas le cas pour d’autres langages.
Pour simplifier le développement de programme R, il est nécessaire d’avoir une interface graphique (appelée aussi GUI). Celle offerte par R est très simpliste et beaucoup préfèrent utiliser RStudio, à juste titre. Cet outil permet de réellement fluidifier le travail avec ce langage.
Enfin, R, dans l’esprit open source, offre la possibilité de charger des paquets (ou packages ou library) afin d’étendre ses possibilités. Il en existe un très grand nombre sur le site du CRAN, parfois redondants entre eux. Pour cette session, nous allons utiliser les paquets contenus dans tidyverse
, qui est une collection de librairies très bien faites et adaptées pour la Data Science.
Voici quelques liens intéressants pour ce cours:
Nous allons voir ici les différentes structures de données utilisées dans R, ainsi que les moyens de les créer et de les manipuler.
vector
Tout est vector
de base (au minimum), il n’existe pas de type scalaire. La fonction class()
renvoie la classe de l’objet passé en paramètre. Les fonctionis.<type>()
permet de tester si l’objet en paramètre est du type demandé.
a = 1
print(a)
## [1] 1
a
## [1] 1
class(a)
## [1] "numeric"
is.vector(a)
## [1] TRUE
Si nous créons le vecteur 1 2 3 4 5
(grâce à la commande 1:5
), nous pouvons voir que les retours des fonctions class()
et is.vector()
sont les mêmes que pour la variable a
ci-dessus.
1:5
## [1] 1 2 3 4 5
class(1:5)
## [1] "integer"
is.vector(1:5)
## [1] TRUE
Ci-dessous sont présentés différents moyens de créer des vecteurs.
c(1, 3, 5)
## [1] 1 3 5
c("A", "b")
## [1] "A" "b"
c("a", 1:3)
## [1] "a" "1" "2" "3"
vector("numeric", 5)
## [1] 0 0 0 0 0
1:5
## [1] 1 2 3 4 5
5:1
## [1] 5 4 3 2 1
seq(1, 5)
## [1] 1 2 3 4 5
seq(1, 5, length = 9)
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
seq(1, 5, by = .5)
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
seq(1, 5, by = .75)
## [1] 1.00 1.75 2.50 3.25 4.00 4.75
rep(1:5, times = 3)
## [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
rep(1:5, each = 2)
## [1] 1 1 2 2 3 3 4 4 5 5
rep(1:5, times = 3, each = 2)
## [1] 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4 5 5
runif(10)
## [1] 0.177034603 0.066276668 0.005197017 0.049850591 0.730894205
## [6] 0.561666068 0.992355754 0.809606194 0.331764860 0.703402273
rnorm(10)
## [1] -0.12764181 1.58835228 -0.65595554 0.74007587 -0.08543956
## [6] -0.14056128 -0.82378787 1.90407070 0.41394864 2.05506503
rnorm(10, 100, 20)
## [1] 118.07500 105.11678 96.22467 96.97579 123.05000 68.66674 104.77468
## [8] 99.09562 124.16610 153.13426
Pour accéder aux éléments d’un vecteur, nous utilisons les []
. Dedans, nous pouvons soit mettre des indices, soit un vecteur booléen de même taille que le vecteur initiale. Les fonctions head()
et tail()
permettent d’avoir les premières ou les dernières valeurs (6 par défaut, modifiable si besoin).
x = rnorm(100)
x[1]
## [1] -1.066203
x[c(1, 5, 10)]
## [1] -1.0662029 -0.6287342 -0.8041143
x[x > 2]
## [1] 2.883829 2.103105 2.334615 2.183640
head(x)
## [1] -1.066202907 0.668619246 -2.327777838 -0.073573977 -0.628734217
## [6] 0.004495144
head(x, 10)
## [1] -1.066202907 0.668619246 -2.327777838 -0.073573977 -0.628734217
## [6] 0.004495144 -0.261151245 -0.245406002 1.486140814 -0.804114340
tail(x)
## [1] 1.74138223 0.09194747 -0.53366075 1.31649874 -1.45544828 -1.34583493
tail(x, 10)
## [1] 0.81249326 -1.41490222 0.58829609 -1.64619650 1.74138223
## [6] 0.09194747 -0.53366075 1.31649874 -1.45544828 -1.34583493
list
Si nous souhaitons mettre ensemble des éléments de type différents, il existe aussi des list
(nommées ou non, voire partiellement), créées via la fonction list()
. Ci-dessous sont présentées différentes listes et comment on accède aux élément de celle-ci (avec des [[]]
ou l’opérateur $
suivi du nom du sous-objet.
a = list(1:5, month.abb, pi)
a
## [[1]]
## [1] 1 2 3 4 5
##
## [[2]]
## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
## [12] "Dec"
##
## [[3]]
## [1] 3.141593
class(a)
## [1] "list"
b = list(b = 1:5, mois = month.abb, pi = pi)
b
## $b
## [1] 1 2 3 4 5
##
## $mois
## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
## [12] "Dec"
##
## $pi
## [1] 3.141593
c = list(1:5, mois = month.abb, pi = pi)
c[[1]]
## [1] 1 2 3 4 5
c[[2]]
## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
## [12] "Dec"
c$mois
## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
## [12] "Dec"
d = list(d1 = c, d2 = head(x))
d
## $d1
## $d1[[1]]
## [1] 1 2 3 4 5
##
## $d1$mois
## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
## [12] "Dec"
##
## $d1$pi
## [1] 3.141593
##
##
## $d2
## [1] -1.066202907 0.668619246 -2.327777838 -0.073573977 -0.628734217
## [6] 0.004495144
d$d1
## [[1]]
## [1] 1 2 3 4 5
##
## $mois
## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
## [12] "Dec"
##
## $pi
## [1] 3.141593
d$d2
## [1] -1.066202907 0.668619246 -2.327777838 -0.073573977 -0.628734217
## [6] 0.004495144
d$d1$mois
## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
## [12] "Dec"
matrix
(et array
)Si on souhaite créer des tableaux à 2 dimensions, il faut utiliser la fonction matrix()
, qui renvoie un objet matrix
. On utilise les [,]
pour accéder aux cellules de la matrice, avec tout ce qui est pour les lignes avant la virgule, et pour les colonnes après.
matrix(0, nrow = 2, ncol = 5)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0 0 0 0 0
## [2,] 0 0 0 0 0
matrix(1:10, 2, 5)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 3 5 7 9
## [2,] 2 4 6 8 10
matrix(1:10, 2, 5, byrow = TRUE)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 2 3 4 5
## [2,] 6 7 8 9 10
m = matrix(runif(100), 20, 5)
m
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.98738357 0.20305268 0.6918126 0.67603582 0.19818092
## [2,] 0.90916959 0.30281010 0.3396540 0.35831115 0.29865382
## [3,] 0.70774778 0.26814503 0.7050606 0.30193696 0.42405035
## [4,] 0.39796039 0.10589999 0.3456480 0.44715391 0.21471862
## [5,] 0.36755347 0.79273229 0.5382245 0.29242414 0.67011538
## [6,] 0.55801965 0.52395863 0.8329023 0.07574047 0.64624253
## [7,] 0.53637856 0.98201592 0.7895472 0.81998304 0.96697905
## [8,] 0.65838520 0.73578558 0.9126702 0.27530233 0.56139100
## [9,] 0.56242855 0.60720368 0.6138791 0.12151891 0.58916883
## [10,] 0.25329023 0.69890138 0.2349903 0.14730542 0.22557924
## [11,] 0.05568334 0.33467548 0.5761912 0.94839625 0.37981468
## [12,] 0.81517883 0.58552636 0.5511563 0.98632758 0.16734898
## [13,] 0.41527378 0.06367596 0.7585646 0.63899358 0.99785779
## [14,] 0.67972860 0.80347104 0.5136912 0.85705281 0.28841775
## [15,] 0.74929791 0.13142131 0.2361596 0.33379358 0.98278460
## [16,] 0.20416052 0.86507029 0.3111941 0.98376469 0.70784443
## [17,] 0.82534836 0.93708747 0.4275744 0.06672589 0.36637256
## [18,] 0.85105235 0.03646817 0.9189686 0.20156798 0.03681182
## [19,] 0.49309170 0.43471119 0.2148760 0.39777233 0.54091694
## [20,] 0.11569973 0.39989469 0.6915437 0.78916554 0.25827325
dim(m)
## [1] 20 5
head(m)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.9873836 0.2030527 0.6918126 0.67603582 0.1981809
## [2,] 0.9091696 0.3028101 0.3396540 0.35831115 0.2986538
## [3,] 0.7077478 0.2681450 0.7050606 0.30193696 0.4240504
## [4,] 0.3979604 0.1059000 0.3456480 0.44715391 0.2147186
## [5,] 0.3675535 0.7927323 0.5382245 0.29242414 0.6701154
## [6,] 0.5580196 0.5239586 0.8329023 0.07574047 0.6462425
m[1,]
## [1] 0.9873836 0.2030527 0.6918126 0.6760358 0.1981809
m[1:3,]
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.9873836 0.2030527 0.6918126 0.6760358 0.1981809
## [2,] 0.9091696 0.3028101 0.3396540 0.3583111 0.2986538
## [3,] 0.7077478 0.2681450 0.7050606 0.3019370 0.4240504
m[,1]
## [1] 0.98738357 0.90916959 0.70774778 0.39796039 0.36755347 0.55801965
## [7] 0.53637856 0.65838520 0.56242855 0.25329023 0.05568334 0.81517883
## [13] 0.41527378 0.67972860 0.74929791 0.20416052 0.82534836 0.85105235
## [19] 0.49309170 0.11569973
m[,1:3]
## [,1] [,2] [,3]
## [1,] 0.98738357 0.20305268 0.6918126
## [2,] 0.90916959 0.30281010 0.3396540
## [3,] 0.70774778 0.26814503 0.7050606
## [4,] 0.39796039 0.10589999 0.3456480
## [5,] 0.36755347 0.79273229 0.5382245
## [6,] 0.55801965 0.52395863 0.8329023
## [7,] 0.53637856 0.98201592 0.7895472
## [8,] 0.65838520 0.73578558 0.9126702
## [9,] 0.56242855 0.60720368 0.6138791
## [10,] 0.25329023 0.69890138 0.2349903
## [11,] 0.05568334 0.33467548 0.5761912
## [12,] 0.81517883 0.58552636 0.5511563
## [13,] 0.41527378 0.06367596 0.7585646
## [14,] 0.67972860 0.80347104 0.5136912
## [15,] 0.74929791 0.13142131 0.2361596
## [16,] 0.20416052 0.86507029 0.3111941
## [17,] 0.82534836 0.93708747 0.4275744
## [18,] 0.85105235 0.03646817 0.9189686
## [19,] 0.49309170 0.43471119 0.2148760
## [20,] 0.11569973 0.39989469 0.6915437
m[1,1]
## [1] 0.9873836
m[1:3,1]
## [1] 0.9873836 0.9091696 0.7077478
m[1,1:3]
## [1] 0.9873836 0.2030527 0.6918126
m[1:3,1:3]
## [,1] [,2] [,3]
## [1,] 0.9873836 0.2030527 0.6918126
## [2,] 0.9091696 0.3028101 0.3396540
## [3,] 0.7077478 0.2681450 0.7050606
Le type array
est finalement une extension de matrix
à plus de 2 dimensions. Nous ne verrons pas ce type pour le moment.
class(m)
## [1] "matrix"
is.array(m)
## [1] TRUE
data.frame
En statistique, nous avons couramment besoin de tables d’individus (ou d’objets) décrits par des variables. En R, ce type de données est contenu, de base, dans des data.frame
. Pour information, il existe un certain nombre de données déjà présentes dans R, dont vous pouvez obtenir la liste par la fonction data()
exécutée dans la console. De plus, pour accéder à l’aide d’un jeu de données, vous pouvez exécuter soit help(<jeu>)
ou ?<jeu>
. Ici, le jeu de données utilisé est mtcars
.
mtcars
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
class(mtcars)
## [1] "data.frame"
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
names(mtcars)
## [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
## [11] "carb"
rownames(mtcars)
## [1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710"
## [4] "Hornet 4 Drive" "Hornet Sportabout" "Valiant"
## [7] "Duster 360" "Merc 240D" "Merc 230"
## [10] "Merc 280" "Merc 280C" "Merc 450SE"
## [13] "Merc 450SL" "Merc 450SLC" "Cadillac Fleetwood"
## [16] "Lincoln Continental" "Chrysler Imperial" "Fiat 128"
## [19] "Honda Civic" "Toyota Corolla" "Toyota Corona"
## [22] "Dodge Challenger" "AMC Javelin" "Camaro Z28"
## [25] "Pontiac Firebird" "Fiat X1-9" "Porsche 914-2"
## [28] "Lotus Europa" "Ford Pantera L" "Ferrari Dino"
## [31] "Maserati Bora" "Volvo 142E"
dim(mtcars)
## [1] 32 11
str(mtcars)
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
Pour accéder aux données, nous pouvons soit utiliser le même procédé que pour une matrix
, soit des moyens plus spécifiques.
mtcars[1,]
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21 6 160 110 3.9 2.62 16.46 0 1 4 4
mtcars[,1]
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
## [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
## [29] 15.8 19.7 15.0 21.4
mtcars[1]
## mpg
## Mazda RX4 21.0
## Mazda RX4 Wag 21.0
## Datsun 710 22.8
## Hornet 4 Drive 21.4
## Hornet Sportabout 18.7
## Valiant 18.1
## Duster 360 14.3
## Merc 240D 24.4
## Merc 230 22.8
## Merc 280 19.2
## Merc 280C 17.8
## Merc 450SE 16.4
## Merc 450SL 17.3
## Merc 450SLC 15.2
## Cadillac Fleetwood 10.4
## Lincoln Continental 10.4
## Chrysler Imperial 14.7
## Fiat 128 32.4
## Honda Civic 30.4
## Toyota Corolla 33.9
## Toyota Corona 21.5
## Dodge Challenger 15.5
## AMC Javelin 15.2
## Camaro Z28 13.3
## Pontiac Firebird 19.2
## Fiat X1-9 27.3
## Porsche 914-2 26.0
## Lotus Europa 30.4
## Ford Pantera L 15.8
## Ferrari Dino 19.7
## Maserati Bora 15.0
## Volvo 142E 21.4
mtcars[,"mpg"]
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
## [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
## [29] 15.8 19.7 15.0 21.4
mtcars["mpg"]
## mpg
## Mazda RX4 21.0
## Mazda RX4 Wag 21.0
## Datsun 710 22.8
## Hornet 4 Drive 21.4
## Hornet Sportabout 18.7
## Valiant 18.1
## Duster 360 14.3
## Merc 240D 24.4
## Merc 230 22.8
## Merc 280 19.2
## Merc 280C 17.8
## Merc 450SE 16.4
## Merc 450SL 17.3
## Merc 450SLC 15.2
## Cadillac Fleetwood 10.4
## Lincoln Continental 10.4
## Chrysler Imperial 14.7
## Fiat 128 32.4
## Honda Civic 30.4
## Toyota Corolla 33.9
## Toyota Corona 21.5
## Dodge Challenger 15.5
## AMC Javelin 15.2
## Camaro Z28 13.3
## Pontiac Firebird 19.2
## Fiat X1-9 27.3
## Porsche 914-2 26.0
## Lotus Europa 30.4
## Ford Pantera L 15.8
## Ferrari Dino 19.7
## Maserati Bora 15.0
## Volvo 142E 21.4
mtcars$mpg
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
## [15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
## [29] 15.8 19.7 15.0 21.4
mtcars["Mazda RX4",]
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21 6 160 110 3.9 2.62 16.46 0 1 4 4
mtcars[1:5, c("mpg", "hp", "qsec")]
## mpg hp qsec
## Mazda RX4 21.0 110 16.46
## Mazda RX4 Wag 21.0 110 17.02
## Datsun 710 22.8 93 18.61
## Hornet 4 Drive 21.4 110 19.44
## Hornet Sportabout 18.7 175 17.02
mtcars[c("Mazda RX4", "Hornet Sportabout"), 1:3]
## mpg cyl disp
## Mazda RX4 21.0 6 160
## Hornet Sportabout 18.7 8 360
mtcars[mtcars$mpg > 30,]
## mpg cyl disp hp drat wt qsec vs am gear carb
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
factor
Puisque R est un langage orienté statistique, il dispose d’un type particulier permettant de coder des variables qualitatives, le type factor
. Comme nous pouvons le voir en transformant la variable en numeric
, ce type code chaque modalité numériquement (en valeur entière de 1 à \(n_{modalité}\)) et garde la liste des modalités en plus (qu’on peut obtenir avec levels()
).
class(iris$Species)
## [1] "factor"
head(iris$Species)
## [1] setosa setosa setosa setosa setosa setosa
## Levels: setosa versicolor virginica
levels(iris$Species)
## [1] "setosa" "versicolor" "virginica"
as.numeric(iris$Species)
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [36] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [71] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3
## [106] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [141] 3 3 3 3 3 3 3 3 3 3
as.character(iris$Species)
## [1] "setosa" "setosa" "setosa" "setosa" "setosa"
## [6] "setosa" "setosa" "setosa" "setosa" "setosa"
## [11] "setosa" "setosa" "setosa" "setosa" "setosa"
## [16] "setosa" "setosa" "setosa" "setosa" "setosa"
## [21] "setosa" "setosa" "setosa" "setosa" "setosa"
## [26] "setosa" "setosa" "setosa" "setosa" "setosa"
## [31] "setosa" "setosa" "setosa" "setosa" "setosa"
## [36] "setosa" "setosa" "setosa" "setosa" "setosa"
## [41] "setosa" "setosa" "setosa" "setosa" "setosa"
## [46] "setosa" "setosa" "setosa" "setosa" "setosa"
## [51] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [56] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [61] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [66] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [71] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [76] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [81] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [86] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [91] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [96] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
## [101] "virginica" "virginica" "virginica" "virginica" "virginica"
## [106] "virginica" "virginica" "virginica" "virginica" "virginica"
## [111] "virginica" "virginica" "virginica" "virginica" "virginica"
## [116] "virginica" "virginica" "virginica" "virginica" "virginica"
## [121] "virginica" "virginica" "virginica" "virginica" "virginica"
## [126] "virginica" "virginica" "virginica" "virginica" "virginica"
## [131] "virginica" "virginica" "virginica" "virginica" "virginica"
## [136] "virginica" "virginica" "virginica" "virginica" "virginica"
## [141] "virginica" "virginica" "virginica" "virginica" "virginica"
## [146] "virginica" "virginica" "virginica" "virginica" "virginica"
tibble
Dans l’univers tidyverse
, c’est l’utilisation du type tibble
qui est privilégié. Pour information, la fonction tibble()
sert à transformer un objet dans cette classe, ou à en créer un nouveau (pas vu ici).
library(tibble)
mtt = as_tibble(mtcars)
mtt
## # A tibble: 32 x 11
## mpg cyl disp hp drat wt qsec vs am gear carb
## * <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## # ... with 22 more rows
class(mtt)
## [1] "tbl_df" "tbl" "data.frame"
head(mtt)
## # A tibble: 6 x 11
## mpg cyl disp hp drat wt qsec vs am gear carb
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Le tidyverse
inclut trois packages permettant l’importation de données externes, contenues dans des fichiers (ainsi que l’exportation). Nous allons ici importer des données classiques (150 iris de trois espèces différentes, décrits par 4 variable), disponibles dans trois formats : texte délimité, Excel et SAS. Les trois fonctions qu’on va utiliser renvoient un objet de type tibble
.
Pour cela, nous utilisons le package readr
, qui améliore les fonctions déjà présentes. Les nouvelles fonctions sont plutôt performantes, et comprennent les données, ce qui permet de limiter les besoins de paramétrisation de celles-ci.
library(readr)
iris_txt = read_delim("../donnees/Iris.txt", delim = "\t")
## Parsed with column specification:
## cols(
## `Sepal Length` = col_double(),
## `Sepal Width` = col_double(),
## `Petal Length` = col_double(),
## `Petal Width` = col_double(),
## Species = col_character()
## )
iris_txt
## # A tibble: 150 x 5
## `Sepal Length` `Sepal Width` `Petal Length` `Petal Width` Species
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## # ... with 140 more rows
Le package readxl
permet donc de lire des fichiers Excel (quelque soit le format : xlsx
ou xls
). La fonction read_excel()
détecte justement le format du fichier.
library(readxl)
iris_xlsx = read_excel("../donnees/Iris.xlsx")
iris_xlsx
## # A tibble: 150 x 5
## `Sepal Length` `Sepal Width` `Petal Length` `Petal Width` Species
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## # ... with 140 more rows
Enfin, pour importer des données SAS mais aussi SPSS et Stata, il existe le package haven
, avec la fonction read_sas()
.
library(haven)
iris_sas = read_sas("../donnees/Iris.sas7bdat")
iris_sas
## # A tibble: 150 x 5
## Sepal_Length Sepal_Width Petal_Length Petal_Width Species
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## # ... with 140 more rows
Pour tout ce qui est manipulation de données, au sens SQL
, nous disposons du package dplyr
qui fournit toutes les fonctions utilisées ici. Bien qu’il y ait aussi des fonctions de base dans R, ce package est préférable.
Vous remarquerez l’utilisation de l’opérateur %>%
pour enchaîner les opérations. Celui-ci est fournit par le package magrittr
, lui aussi dans le tidyverse
. Ce formalisme permet d’avoir un code plus lisible, car déroulant les étapes les unes après les autres, contrairement à la programmation classique dans R.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Ici, les deux opérations consistent respectivement à sélectionner des lignes (restriction) ou des colonnes (projection).
mtcars %>% filter(mpg > 30)
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## 2 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## 3 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## 4 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
mtcars %>% filter(mpg > 30 & qsec < 19)
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## 2 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
mtcars %>% filter(carb == 8)
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 15 8 301 335 3.54 3.57 14.6 0 1 5 8
mtcars %>% filter(between(mpg, 30, 32))
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## 2 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
mtcars %>% slice(1:5)
## # A tibble: 5 x 11
## mpg cyl disp hp drat wt qsec vs am gear carb
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
mtcars %>% slice(25:n()) # n() indique le nombre de lignes de la table
## # A tibble: 8 x 11
## mpg cyl disp hp drat wt qsec vs am gear carb
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## 2 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## 3 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## 4 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## 5 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## 6 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## 7 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## 8 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
mtcars %>% slice(seq(1, n(), by = 4))
## # A tibble: 8 x 11
## mpg cyl disp hp drat wt qsec vs am gear carb
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## 2 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## 4 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## 5 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## 6 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## 7 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## 8 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
head(mtcars) %>% select(mpg)
## mpg
## Mazda RX4 21.0
## Mazda RX4 Wag 21.0
## Datsun 710 22.8
## Hornet 4 Drive 21.4
## Hornet Sportabout 18.7
## Valiant 18.1
head(mtcars) %>% select(qsec, mpg, hp)
## qsec mpg hp
## Mazda RX4 16.46 21.0 110
## Mazda RX4 Wag 17.02 21.0 110
## Datsun 710 18.61 22.8 93
## Hornet 4 Drive 19.44 21.4 110
## Hornet Sportabout 17.02 18.7 175
## Valiant 20.22 18.1 105
head(mtcars) %>% select(5, 3, 9)
## drat disp am
## Mazda RX4 3.90 160 1
## Mazda RX4 Wag 3.90 160 1
## Datsun 710 3.85 108 1
## Hornet 4 Drive 3.08 258 0
## Hornet Sportabout 3.15 360 0
## Valiant 2.76 225 0
head(mtcars) %>% select(starts_with("c")) # d'autres possibilités de ce type existent (voir ?select_helpers)
## cyl carb
## Mazda RX4 6 4
## Mazda RX4 Wag 6 4
## Datsun 710 4 1
## Hornet 4 Drive 6 1
## Hornet Sportabout 8 2
## Valiant 6 1
La fonction arrange()
permet le tri sur une ou plusieurs variables, avec desc()
pour indiquer un ordre décroissant.
head(mtcars) %>% arrange(mpg)
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
## 2 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## 3 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## 4 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## 5 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## 6 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
head(mtcars) %>% arrange(am, mpg)
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
## 2 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## 3 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## 4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## 5 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## 6 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
head(mtcars) %>% arrange(desc(mpg))
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## 2 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## 3 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## 4 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Comme vous avez pu le remarquer, dans les différents exemples ci-dessus, le nom des lignes est supprimé. Pour le récupérer, nous utilisons la fonction rownames_to_column()
, qui permet de le transformer en variable.
head(mtcars) %>% rownames_to_column(var = "car")
## car mpg cyl disp hp drat wt qsec vs am gear carb
## 1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## 2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## 3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## 4 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## 5 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## 6 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Pour ajouter une variable, il existe la fonction mutate()
.
head(mtcars) %>% mutate(ratio = wt / hp, zero = 0, wt = NULL, hp = NULL)
## mpg cyl disp drat qsec vs am gear carb ratio zero
## 1 21.0 6 160 3.90 16.46 0 1 4 4 0.02381818 0
## 2 21.0 6 160 3.90 17.02 0 1 4 4 0.02613636 0
## 3 22.8 4 108 3.85 18.61 1 1 4 1 0.02494624 0
## 4 21.4 6 258 3.08 19.44 1 0 3 1 0.02922727 0
## 5 18.7 8 360 3.15 17.02 0 0 3 2 0.01965714 0
## 6 18.1 6 225 2.76 20.22 1 0 3 1 0.03295238 0
head(mtcars) %>% mutate(n = row_number(), rang_mpg = min_rank(desc(mpg)))
## mpg cyl disp hp drat wt qsec vs am gear carb n rang_mpg
## 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 1 3
## 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 2 3
## 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 3 1
## 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 4 2
## 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 5 5
## 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 6 6
Si l’on veut garder uniquement la variable nouvellement créée, on utilise transmute()
.
head(mtcars) %>% transmute(ratio = wt / hp)
## ratio
## 1 0.02381818
## 2 0.02613636
## 3 0.02494624
## 4 0.02922727
## 5 0.01965714
## 6 0.03295238
Pour résumer une ou plusieurs variables, nous utilisons la fonction summarise()
.
mtcars %>% summarise(
n = n(),
mpg_mean = mean(mpg),
nbtype_carb = n_distinct(carb)
)
## n mpg_mean nbtype_carb
## 1 32 20.09062 6
Et si l’on souhaite effecture par groupes déterminés par les modalités d’une variable, il existe la fonction group_by()
.
mtcars %>%
group_by(cyl) %>%
summarise(
n = n(),
mpg_mean = mean(mpg),
nbtype_carb = n_distinct(carb)
)
## # A tibble: 3 x 4
## cyl n mpg_mean nbtype_carb
## <dbl> <int> <dbl> <int>
## 1 4 11 26.66364 2
## 2 6 7 19.74286 3
## 3 8 14 15.10000 4
Pour tester les méthodes, nous créons une nouvelle table engine
, indiquant le type en fonction de la valeur de cyl
. Vous remarquerez que par rapport à mtcars
, il y a une valeur en moins (4) et une valeur en plus (12).
engine = tibble(
cyl = c(6, 8, 12),
type = c("medium", "big", "very big")
)
Nous pouvons maintenant utiliser les différentes fonctions de jointure disponibles.
mtcars %>% inner_join(engine)
## Joining, by = "cyl"
## mpg cyl disp hp drat wt qsec vs am gear carb type
## 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 medium
## 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 medium
## 3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 medium
## 4 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 big
## 5 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 medium
## 6 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 big
## 7 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 medium
## 8 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 medium
## 9 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 big
## 10 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 big
## 11 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 big
## 12 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 big
## 13 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 big
## 14 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 big
## 15 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 big
## 16 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 big
## 17 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 big
## 18 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 big
## 19 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 big
## 20 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 medium
## 21 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 big
mtcars %>% left_join(engine)
## Joining, by = "cyl"
## mpg cyl disp hp drat wt qsec vs am gear carb type
## 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 medium
## 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 medium
## 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 <NA>
## 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 medium
## 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 big
## 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 medium
## 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 big
## 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 <NA>
## 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 <NA>
## 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 medium
## 11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 medium
## 12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 big
## 13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 big
## 14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 big
## 15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 big
## 16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 big
## 17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 big
## 18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 <NA>
## 19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 <NA>
## 20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 <NA>
## 21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 <NA>
## 22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 big
## 23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 big
## 24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 big
## 25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 big
## 26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 <NA>
## 27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 <NA>
## 28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 <NA>
## 29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 big
## 30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 medium
## 31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 big
## 32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 <NA>
mtcars %>% right_join(engine)
## Joining, by = "cyl"
## mpg cyl disp hp drat wt qsec vs am gear carb type
## 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 medium
## 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 medium
## 3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 medium
## 4 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 medium
## 5 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 medium
## 6 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 medium
## 7 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 medium
## 8 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 big
## 9 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 big
## 10 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 big
## 11 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 big
## 12 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 big
## 13 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 big
## 14 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 big
## 15 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 big
## 16 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 big
## 17 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 big
## 18 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 big
## 19 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 big
## 20 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 big
## 21 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 big
## 22 NA 12 NA NA NA NA NA NA NA NA NA very big
mtcars %>% full_join(engine)
## Joining, by = "cyl"
## mpg cyl disp hp drat wt qsec vs am gear carb type
## 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 medium
## 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 medium
## 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 <NA>
## 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 medium
## 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 big
## 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 medium
## 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 big
## 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 <NA>
## 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 <NA>
## 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 medium
## 11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 medium
## 12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 big
## 13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 big
## 14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 big
## 15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 big
## 16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 big
## 17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 big
## 18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 <NA>
## 19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 <NA>
## 20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 <NA>
## 21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 <NA>
## 22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 big
## 23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 big
## 24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 big
## 25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 big
## 26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 <NA>
## 27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 <NA>
## 28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 <NA>
## 29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 big
## 30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 medium
## 31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 big
## 32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 <NA>
## 33 NA 12 NA NA NA NA NA NA NA NA NA very big
mtcars %>% semi_join(engine)
## Joining, by = "cyl"
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## 3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## 4 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## 5 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## 6 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## 7 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## 8 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## 9 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## 10 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## 11 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## 12 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## 13 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## 14 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## 15 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## 16 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## 17 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## 18 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## 19 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## 20 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## 21 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
mtcars %>% anti_join(engine)
## Joining, by = "cyl"
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## 4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## 5 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## 6 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## 8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## 9 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## 10 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## 11 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
La base de données Gymnase2000
contient les informations d’un (petit) club de sport. Elle contient les tables suivantes (au format SAS ici) :
Schéma de Gymnase2000
Vous devez d’abord importer les données dans R, puis répondre aux demandes suivantes :
Questions subsidiaires :