R
- STID 2ème annéeNous allons voir ici comment réaliser les opérations classiques faites en SQL
au moyen de fonctions R
.
subset()
Cette fonction permet de réaliser au moins deux opérations classiques en `SQL :
La fonction subset()
prend en premier paramètre le data.frame
sur lequel faire l’opération. Le deuxième paramètre à définir ici est celui pour la restriction (subset =
). Voici comment se restreindre par exemple aux voitures (données mtcars
) avec une consommation strictement inférieure à 15 (mpg < 15
).
subset(mtcars, subset = mpg < 15)
mpg cyl disp hp drat wt qsec vs am gear carb
Duster 360 14.3 8 360 245 3.21 3.570 15.84 0 0 3 4
Cadillac Fleetwood 10.4 8 472 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440 230 3.23 5.345 17.42 0 0 3 4
Camaro Z28 13.3 8 350 245 3.73 3.840 15.41 0 0 3 4
Ici, c’est le paramètre pour la projection qu’il faut définir (select =
). On peut lui passer un ou plusieurs noms de colonnes. On veut par exemple ne récupérer que la puissance (hp
) et la cylindrée (disp
).
subset(mtcars, select = c(hp, disp))
hp disp
Mazda RX4 110 160.0
Mazda RX4 Wag 110 160.0
Datsun 710 93 108.0
Hornet 4 Drive 110 258.0
Hornet Sportabout 175 360.0
Valiant 105 225.0
Duster 360 245 360.0
Merc 240D 62 146.7
Merc 230 95 140.8
Merc 280 123 167.6
Merc 280C 123 167.6
Merc 450SE 180 275.8
Merc 450SL 180 275.8
Merc 450SLC 180 275.8
Cadillac Fleetwood 205 472.0
Lincoln Continental 215 460.0
Chrysler Imperial 230 440.0
Fiat 128 66 78.7
Honda Civic 52 75.7
Toyota Corolla 65 71.1
Toyota Corona 97 120.1
Dodge Challenger 150 318.0
AMC Javelin 150 304.0
Camaro Z28 245 350.0
Pontiac Firebird 175 400.0
Fiat X1-9 66 79.0
Porsche 914-2 91 120.3
Lotus Europa 113 95.1
Ford Pantera L 264 351.0
Ferrari Dino 175 145.0
Maserati Bora 335 301.0
Volvo 142E 109 121.0
Mais il est aussi possible d’exclure des colonnes dans le résultat. C’est-à-dire que plutôt de dire celles qu’on veut, on va indiquer celles dont on ne veut pas.
subset(mtcars, select = -c(hp, disp))
mpg cyl drat wt qsec vs am gear carb
Mazda RX4 21.0 6 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 4.11 2.780 18.60 1 1 4 2
Bien évidemment, il est possible de combiner les deux paramètres pour réaliser une opération de restriction et une opération de projection dans la même commande. Nous récupérons ici la puissance (hp
) et la cylindrée (disp
) des voitures (données mtcars
) avec une consommation strictement inférieure à 15 (mpg < 15
).
subset(mtcars, subset = mpg < 15, select = c(hp, disp))
hp disp
Duster 360 245 360
Cadillac Fleetwood 205 472
Lincoln Continental 215 460
Chrysler Imperial 230 440
Camaro Z28 245 350
transform()
Cette fonction permet elle de créer de nouvelles variables, basées sur des calculs à partir d’autres variables. Elle renvoie le data.frame
, passé en premier paramètre, complété des nouvelles variables. On calcule ici par exemple le rapport poids (wt
) / puissance (hp
). Et on calcule aussi la consommation en litres pour 100 km.
transform(mtcars,
rapport = round(1000 * wt / hp),
conso = round(236 / mpg, 2))
Ici, toute fonction existante applicable sur un vecteur est utilisable.
aggregate()
On va pouvoir réaliser ici tous les calculs d’agrégats possibles sur une table, avec ou sans regroupement. Le premier paramètre sera la formule (sous la forme ... ~ ...
) permettant de déterminer sur quelles variables faire le calcul (à gauche du ~
) et quelles variables utiliser pour le regroupement (à droite du ~
). Le deuxième sera le jeu de données à utiliser. Et le troisième sera la fonction à appliquer.
# Calcul de la moyenne de mpg pour tous
aggregate(mpg ~ 1, mtcars, mean)
mpg
1 20.09062
# Calcul de la moyenne de mpg et de hp pour tous
aggregate(cbind(mpg, hp) ~ 1, mtcars, mean)
mpg hp
1 20.09062 146.6875
# Calcul de la moyenne de toutes les variables pour tous
aggregate(. ~ 1, mtcars, mean)
mpg cyl disp hp drat wt qsec vs
1 20.09062 6.1875 230.7219 146.6875 3.596563 3.21725 17.84875 0.4375
am gear carb
1 0.40625 3.6875 2.8125
# Calcul de la moyenne de mpg pour chaque modalité de am
aggregate(mpg ~ am, mtcars, mean)
am mpg
1 0 17.14737
2 1 24.39231
# Calcul de la moyenne de mpg en fonction de am et de cyl
aggregate(mpg ~ am + cyl, mtcars, mean)
am cyl mpg
1 0 4 22.90000
2 1 4 28.07500
3 0 6 19.12500
4 1 6 20.56667
5 0 8 15.05000
6 1 8 15.40000
# Calcul de la moyenne de mpg et de hp en fonction de am et de cyl
aggregate(cbind(mpg, hp) ~ am + cyl, mtcars, mean)
am cyl mpg hp
1 0 4 22.90000 84.66667
2 1 4 28.07500 81.87500
3 0 6 19.12500 115.25000
4 1 6 20.56667 131.66667
5 0 8 15.05000 194.16667
6 1 8 15.40000 299.50000
merge()
Cette fonction permet elle de réaliser des jointures entre deux tables. Pour présenter le fonctionnement, nous allons créer une table avec le type de moteur selon le nombre de cylindres (cyl
dans mtcars
). Vous remarquerez que la valeur 4
n’est pas présente dans ce tableau, alors qu’elle l’est dans mtcars
. Inversement, 12
est présent ici mais pas dans mtcars
.
types = data.frame(
cyl = c(6, 8, 12),
type = c("moyen", "gros", "très gros")
)
types
cyl type
1 6 moyen
2 8 gros
3 12 très gros
unique(mtcars$cyl)
[1] 6 4 8
La focntion merge()
prend, au minimum, deux paramètres que sont les deux tables à fusionner. Par défaut, c’est une jointure naturelle qui est réalisée (i.e. on recherche l’égalité des variables ayant le même nom).
merge(mtcars, types)
cyl mpg disp hp drat wt qsec vs am gear carb type
1 6 21.0 160.0 110 3.90 2.620 16.46 0 1 4 4 moyen
2 6 21.0 160.0 110 3.90 2.875 17.02 0 1 4 4 moyen
3 6 18.1 225.0 105 2.76 3.460 20.22 1 0 3 1 moyen
4 6 17.8 167.6 123 3.92 3.440 18.90 1 0 4 4 moyen
5 6 19.2 167.6 123 3.92 3.440 18.30 1 0 4 4 moyen
6 6 21.4 258.0 110 3.08 3.215 19.44 1 0 3 1 moyen
7 6 19.7 145.0 175 3.62 2.770 15.50 0 1 5 6 moyen
8 8 18.7 360.0 175 3.15 3.440 17.02 0 0 3 2 gros
9 8 17.3 275.8 180 3.07 3.730 17.60 0 0 3 3 gros
10 8 14.3 360.0 245 3.21 3.570 15.84 0 0 3 4 gros
11 8 14.7 440.0 230 3.23 5.345 17.42 0 0 3 4 gros
12 8 10.4 472.0 205 2.93 5.250 17.98 0 0 3 4 gros
13 8 16.4 275.8 180 3.07 4.070 17.40 0 0 3 3 gros
14 8 19.2 400.0 175 3.08 3.845 17.05 0 0 3 2 gros
15 8 15.2 275.8 180 3.07 3.780 18.00 0 0 3 3 gros
16 8 15.2 304.0 150 3.15 3.435 17.30 0 0 3 2 gros
17 8 10.4 460.0 215 3.00 5.424 17.82 0 0 3 4 gros
18 8 15.8 351.0 264 4.22 3.170 14.50 0 1 5 4 gros
19 8 15.5 318.0 150 2.76 3.520 16.87 0 0 3 2 gros
20 8 15.0 301.0 335 3.54 3.570 14.60 0 1 5 8 gros
21 8 13.3 350.0 245 3.73 3.840 15.41 0 0 3 4 gros
Si le nom des colonnes diffère ou que vous ne voulez pas regarder l’égalité entre toutes les variables ayant même nom, il faut le préciser dans les paramètres by
(même noms de colonnes dans les deux tables), ou by.x
et by.y
pour dire quelles variables prendre dans la première table (by.x
) et dans la deuxième table (by.y
).
names(types)[1] = "nbcyl"
types
nbcyl type
1 6 moyen
2 8 gros
3 12 très gros
merge(mtcars, types, by.x = "cyl", by.y = "nbcyl")
cyl mpg disp hp drat wt qsec vs am gear carb type
1 6 21.0 160.0 110 3.90 2.620 16.46 0 1 4 4 moyen
2 6 21.0 160.0 110 3.90 2.875 17.02 0 1 4 4 moyen
3 6 18.1 225.0 105 2.76 3.460 20.22 1 0 3 1 moyen
4 6 17.8 167.6 123 3.92 3.440 18.90 1 0 4 4 moyen
5 6 19.2 167.6 123 3.92 3.440 18.30 1 0 4 4 moyen
6 6 21.4 258.0 110 3.08 3.215 19.44 1 0 3 1 moyen
7 6 19.7 145.0 175 3.62 2.770 15.50 0 1 5 6 moyen
8 8 18.7 360.0 175 3.15 3.440 17.02 0 0 3 2 gros
9 8 17.3 275.8 180 3.07 3.730 17.60 0 0 3 3 gros
10 8 14.3 360.0 245 3.21 3.570 15.84 0 0 3 4 gros
11 8 14.7 440.0 230 3.23 5.345 17.42 0 0 3 4 gros
12 8 10.4 472.0 205 2.93 5.250 17.98 0 0 3 4 gros
13 8 16.4 275.8 180 3.07 4.070 17.40 0 0 3 3 gros
14 8 19.2 400.0 175 3.08 3.845 17.05 0 0 3 2 gros
15 8 15.2 275.8 180 3.07 3.780 18.00 0 0 3 3 gros
16 8 15.2 304.0 150 3.15 3.435 17.30 0 0 3 2 gros
17 8 10.4 460.0 215 3.00 5.424 17.82 0 0 3 4 gros
18 8 15.8 351.0 264 4.22 3.170 14.50 0 1 5 4 gros
19 8 15.5 318.0 150 2.76 3.520 16.87 0 0 3 2 gros
20 8 15.0 301.0 335 3.54 3.570 14.60 0 1 5 8 gros
21 8 13.3 350.0 245 3.73 3.840 15.41 0 0 3 4 gros
Vous remarquerez, en le testant, que si on ne précise pas sur quelles variables faire la jointure, en l’absence de variables identiques entre les tables, la fonction merge()
réalise le produit cartésien.
Dans les deux exemples ci-dessus, vous avez du voir que toutes les lignes ne son pas retournées. En effet, les voitures de mtcars
avec cyl == 4
ne sont pas intégrées. De même que la dernière ligne de types
. Pour avoir toutes les lignes, il faut ajouter le paramètre all = TRUE
, pour lui dire de faire la jointure complète (i.e. FULL OUTER JOIN
). Dans ce cas, on aura donc 33 lignes, avec des NA
pour les cellules dont il n’a pas l’information.
names(types)[1] = "cyl"
merge(mtcars, types, all = TRUE)
cyl mpg disp hp drat wt qsec vs am gear carb type
1 4 22.8 140.8 95 3.92 3.150 22.90 1 0 4 2 <NA>
2 4 32.4 78.7 66 4.08 2.200 19.47 1 1 4 1 <NA>
3 4 22.8 108.0 93 3.85 2.320 18.61 1 1 4 1 <NA>
4 4 24.4 146.7 62 3.69 3.190 20.00 1 0 4 2 <NA>
5 4 21.5 120.1 97 3.70 2.465 20.01 1 0 3 1 <NA>
6 4 27.3 79.0 66 4.08 1.935 18.90 1 1 4 1 <NA>
7 4 30.4 75.7 52 4.93 1.615 18.52 1 1 4 2 <NA>
8 4 33.9 71.1 65 4.22 1.835 19.90 1 1 4 1 <NA>
9 4 26.0 120.3 91 4.43 2.140 16.70 0 1 5 2 <NA>
10 4 30.4 95.1 113 3.77 1.513 16.90 1 1 5 2 <NA>
11 4 21.4 121.0 109 4.11 2.780 18.60 1 1 4 2 <NA>
12 6 21.0 160.0 110 3.90 2.620 16.46 0 1 4 4 moyen
13 6 21.0 160.0 110 3.90 2.875 17.02 0 1 4 4 moyen
14 6 18.1 225.0 105 2.76 3.460 20.22 1 0 3 1 moyen
15 6 17.8 167.6 123 3.92 3.440 18.90 1 0 4 4 moyen
16 6 19.2 167.6 123 3.92 3.440 18.30 1 0 4 4 moyen
17 6 21.4 258.0 110 3.08 3.215 19.44 1 0 3 1 moyen
18 6 19.7 145.0 175 3.62 2.770 15.50 0 1 5 6 moyen
19 8 18.7 360.0 175 3.15 3.440 17.02 0 0 3 2 gros
20 8 17.3 275.8 180 3.07 3.730 17.60 0 0 3 3 gros
21 8 14.3 360.0 245 3.21 3.570 15.84 0 0 3 4 gros
22 8 14.7 440.0 230 3.23 5.345 17.42 0 0 3 4 gros
23 8 10.4 472.0 205 2.93 5.250 17.98 0 0 3 4 gros
24 8 16.4 275.8 180 3.07 4.070 17.40 0 0 3 3 gros
25 8 19.2 400.0 175 3.08 3.845 17.05 0 0 3 2 gros
26 8 15.2 275.8 180 3.07 3.780 18.00 0 0 3 3 gros
27 8 15.2 304.0 150 3.15 3.435 17.30 0 0 3 2 gros
28 8 10.4 460.0 215 3.00 5.424 17.82 0 0 3 4 gros
29 8 15.8 351.0 264 4.22 3.170 14.50 0 1 5 4 gros
30 8 15.5 318.0 150 2.76 3.520 16.87 0 0 3 2 gros
31 8 15.0 301.0 335 3.54 3.570 14.60 0 1 5 8 gros
32 8 13.3 350.0 245 3.73 3.840 15.41 0 0 3 4 gros
33 12 NA NA NA NA NA NA NA NA NA NA très gros
On peut bien évidemment faire les jointures externes gauches (LEFT OUTER JOIN
) ou droite (RIGHT OUTER JOIN
) avec respectivement les paramètres all.x
et all.y
.
merge(mtcars, types, all.x = TRUE)
cyl mpg disp hp drat wt qsec vs am gear carb type
1 4 22.8 140.8 95 3.92 3.150 22.90 1 0 4 2 <NA>
2 4 32.4 78.7 66 4.08 2.200 19.47 1 1 4 1 <NA>
3 4 22.8 108.0 93 3.85 2.320 18.61 1 1 4 1 <NA>
4 4 24.4 146.7 62 3.69 3.190 20.00 1 0 4 2 <NA>
5 4 21.5 120.1 97 3.70 2.465 20.01 1 0 3 1 <NA>
6 4 27.3 79.0 66 4.08 1.935 18.90 1 1 4 1 <NA>
7 4 30.4 75.7 52 4.93 1.615 18.52 1 1 4 2 <NA>
8 4 33.9 71.1 65 4.22 1.835 19.90 1 1 4 1 <NA>
9 4 26.0 120.3 91 4.43 2.140 16.70 0 1 5 2 <NA>
10 4 30.4 95.1 113 3.77 1.513 16.90 1 1 5 2 <NA>
11 4 21.4 121.0 109 4.11 2.780 18.60 1 1 4 2 <NA>
12 6 21.0 160.0 110 3.90 2.620 16.46 0 1 4 4 moyen
13 6 21.0 160.0 110 3.90 2.875 17.02 0 1 4 4 moyen
14 6 18.1 225.0 105 2.76 3.460 20.22 1 0 3 1 moyen
15 6 17.8 167.6 123 3.92 3.440 18.90 1 0 4 4 moyen
16 6 19.2 167.6 123 3.92 3.440 18.30 1 0 4 4 moyen
17 6 21.4 258.0 110 3.08 3.215 19.44 1 0 3 1 moyen
18 6 19.7 145.0 175 3.62 2.770 15.50 0 1 5 6 moyen
19 8 18.7 360.0 175 3.15 3.440 17.02 0 0 3 2 gros
20 8 17.3 275.8 180 3.07 3.730 17.60 0 0 3 3 gros
21 8 14.3 360.0 245 3.21 3.570 15.84 0 0 3 4 gros
22 8 14.7 440.0 230 3.23 5.345 17.42 0 0 3 4 gros
23 8 10.4 472.0 205 2.93 5.250 17.98 0 0 3 4 gros
24 8 16.4 275.8 180 3.07 4.070 17.40 0 0 3 3 gros
25 8 19.2 400.0 175 3.08 3.845 17.05 0 0 3 2 gros
26 8 15.2 275.8 180 3.07 3.780 18.00 0 0 3 3 gros
27 8 15.2 304.0 150 3.15 3.435 17.30 0 0 3 2 gros
28 8 10.4 460.0 215 3.00 5.424 17.82 0 0 3 4 gros
29 8 15.8 351.0 264 4.22 3.170 14.50 0 1 5 4 gros
30 8 15.5 318.0 150 2.76 3.520 16.87 0 0 3 2 gros
31 8 15.0 301.0 335 3.54 3.570 14.60 0 1 5 8 gros
32 8 13.3 350.0 245 3.73 3.840 15.41 0 0 3 4 gros
merge(mtcars, types, all.y = TRUE)
cyl mpg disp hp drat wt qsec vs am gear carb type
1 6 21.0 160.0 110 3.90 2.620 16.46 0 1 4 4 moyen
2 6 21.0 160.0 110 3.90 2.875 17.02 0 1 4 4 moyen
3 6 18.1 225.0 105 2.76 3.460 20.22 1 0 3 1 moyen
4 6 17.8 167.6 123 3.92 3.440 18.90 1 0 4 4 moyen
5 6 19.2 167.6 123 3.92 3.440 18.30 1 0 4 4 moyen
6 6 21.4 258.0 110 3.08 3.215 19.44 1 0 3 1 moyen
7 6 19.7 145.0 175 3.62 2.770 15.50 0 1 5 6 moyen
8 8 18.7 360.0 175 3.15 3.440 17.02 0 0 3 2 gros
9 8 17.3 275.8 180 3.07 3.730 17.60 0 0 3 3 gros
10 8 14.3 360.0 245 3.21 3.570 15.84 0 0 3 4 gros
11 8 14.7 440.0 230 3.23 5.345 17.42 0 0 3 4 gros
12 8 10.4 472.0 205 2.93 5.250 17.98 0 0 3 4 gros
13 8 16.4 275.8 180 3.07 4.070 17.40 0 0 3 3 gros
14 8 19.2 400.0 175 3.08 3.845 17.05 0 0 3 2 gros
15 8 15.2 275.8 180 3.07 3.780 18.00 0 0 3 3 gros
16 8 15.2 304.0 150 3.15 3.435 17.30 0 0 3 2 gros
17 8 10.4 460.0 215 3.00 5.424 17.82 0 0 3 4 gros
18 8 15.8 351.0 264 4.22 3.170 14.50 0 1 5 4 gros
19 8 15.5 318.0 150 2.76 3.520 16.87 0 0 3 2 gros
20 8 15.0 301.0 335 3.54 3.570 14.60 0 1 5 8 gros
21 8 13.3 350.0 245 3.73 3.840 15.41 0 0 3 4 gros
22 12 NA NA NA NA NA NA NA NA NA NA très gros
setNames()
Cette fonction permet de renommer les colonnes d’un data.frame
et de le renvoyer. Reprenons un exemple de calcul d’agrégat vu précédemment. Quelque soit le calcul indiqué, le nom de la colonne est toujours le même.
aggregate(mpg ~ am, mtcars, mean)
am mpg
1 0 17.14737
2 1 24.39231
Si nous voulons avoir dans un même tableau, la moyenne et l’écart-type, il nous faudrait faire une jointure. Mais l’idéal serait de renommer les tableaux correctement. On peut donc le faire avec setNames()
dont voici un exemple de fonctionnement.
setNames(aggregate(mpg ~ am, mtcars, mean), c("am", "Moyenne"))
am Moyenne
1 0 17.14737
2 1 24.39231
SQL
directementLa librairie sqldf
permet de réaliser des commandes SQL
directement sur des data.frame
s. il faut simplement mettre la requête SQL
en chaîne de caractère comme paramètre de la fonction sqldf()
. Les seules restrictions sont que les RIGHT OUTER JOIN
et FULL OUTER JOIN
ne sont pas supportées (comme en SQLite
).
library(sqldf)
sqldf("SELECT * FROM mtcars")
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 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
11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
sqldf("SELECT * FROM mtcars WHERE mpg < 15")
mpg cyl disp hp drat wt qsec vs am gear carb
1 14.3 8 360 245 3.21 3.570 15.84 0 0 3 4
2 10.4 8 472 205 2.93 5.250 17.98 0 0 3 4
3 10.4 8 460 215 3.00 5.424 17.82 0 0 3 4
4 14.7 8 440 230 3.23 5.345 17.42 0 0 3 4
5 13.3 8 350 245 3.73 3.840 15.41 0 0 3 4
sqldf("SELECT hp, disp FROM mtcars WHERE mpg < 15")
hp disp
1 245 360
2 205 472
3 215 460
4 230 440
5 245 350
sqldf("
SELECT *,
ROUND(1000 * wt / hp) AS rapport,
ROUND(236 / mpg, 2) AS conso
FROM mtcars
")
mpg cyl disp hp drat wt qsec vs am gear carb rapport conso
1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 24 11.24
2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 26 11.24
3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 25 10.35
4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 29 11.03
5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 20 12.62
6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 33 13.04
7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 15 16.50
8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 51 9.67
9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 33 10.35
10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 28 12.29
11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 28 13.26
12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 23 14.39
13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 21 13.64
14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 21 15.53
15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 26 22.69
16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 25 22.69
17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 23 16.05
18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 33 7.28
19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 31 7.76
20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 28 6.96
21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 25 10.98
22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 23 15.23
23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 23 15.53
24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 16 17.74
25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 22 12.29
26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 29 8.64
27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 24 9.08
28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 13 7.76
29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 12 14.94
30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 16 11.98
31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 11 15.73
32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 26 11.03
sqldf("
SELECT am, cyl, AVG(mpg), AVG(hp)
FROM mtcars
GROUP BY am, cyl
")
am cyl AVG(mpg) AVG(hp)
1 0 4 22.90000 84.66667
2 0 6 19.12500 115.25000
3 0 8 15.05000 194.16667
4 1 4 28.07500 81.87500
5 1 6 20.56667 131.66667
6 1 8 15.40000 299.50000
sqldf("
SELECT *
FROM mtcars NATURAL JOIN types
")
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 moyen
2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 moyen
3 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 moyen
4 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 gros
5 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 moyen
6 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 gros
7 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 moyen
8 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 moyen
9 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 gros
10 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 gros
11 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 gros
12 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 gros
13 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 gros
14 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 gros
15 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 gros
16 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 gros
17 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 gros
18 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 gros
19 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 gros
20 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 moyen
21 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 gros
iris
A partir des données iris
, déjà présentes dans R
, créer les tableaux suivantes, à l’aide des fonctions aggregate()
et merge()
:
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.006 3.428 1.462 0.246
2 versicolor 5.936 2.770 4.260 1.326
3 virginica 6.588 2.974 5.552 2.026
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 0.3524897 0.3790644 0.1736640 0.1053856
2 versicolor 0.5161711 0.3137983 0.4699110 0.1977527
3 virginica 0.6358796 0.3224966 0.5518947 0.2746501
Sepal.Length
Species Sepal.Length.Min. Sepal.Length.1st Qu. Sepal.Length.Median
1 setosa 4.300 4.800 5.000
2 versicolor 4.900 5.600 5.900
3 virginica 4.900 6.225 6.500
Sepal.Length.Mean Sepal.Length.3rd Qu. Sepal.Length.Max.
1 5.006 5.200 5.800
2 5.936 6.300 7.000
3 6.588 6.900 7.900
Espèce Moyenne Médiane
1 setosa 5.006 5.0
2 versicolor 5.936 5.9
3 virginica 6.588 6.5
heart.txt
Reprenez le jeu de données présent dans le fichier heart.txt
.
data.frame
avec uniquement les individus masculins ayant un problème cardiaquetype_douleur
, sucre
, electro
, et vaisseau
angine
, depression
data.frame
à partir de ce data.frame
, avec
nbA
comptant le nombre de fois où une variable des variables suivantes est égale à A
: type_douleur
, sucre
, electro
, et vaisseau
flag
avec les deux modalités suivantes :
"problème"
: angine
à "oui"
et depression
supérieur ou égal à 4.0
"attention"
: sinondata.frame
s précédement créés pour avoir les informations en une seule table