Dans ce TP, nous allons utilier la base de données publique des médicaments. Dans la page Téléchargement (lien situé tout en bas du site), vous trouverez les liens vers un fichier explicatif (en PDF) et les fichiers de données (au format texte).
Vous devez déjà tous les télécharger (9 fichiers au total), et les placer idéalement dans un répertoire dédié.
Il est possible d’importer des données provenannt de fichiers texte avec la commande read.table()
, qui a les paramètres principaux suivants (avec valeur
par défaut éventuelle) :
file
: nom du fichierheader
: présence ou non des noms de variables (FALSE
)sep
: séparateur de variable (` `)na.strings
: chaîne(s) pour valeurs manquantes (NA
)skip
: nombre de lignes à ne pas prendre en compte en début de fichier (0
)nrow
: nombre de lignes à lire (-1
: toutes les lignes)stringsAsFactors
: transformations des chaînes en factor
ou non (TRUE
)quote
: symbole(s) pour les chaînes de caractères ('"
- attention aux apostrophes en français donc)Cette fonction renvoie un objet de type data.frame
.
Il existe quelques fonctions dérivés avec des valeurs par défaut différentes
read.csv()
, read.csv2()
read.delim()
, read.delim2()
Par exemple, nous disposons du fichier heart.txt
, contenant les données de 270 personnes.
Nous remarquons les points suivants :
"\t"
)Pour importer ce fichier, nous devons donc utiliser le code suivant. Vous devez d’abord télécharger le fichier. Attention : il est supposé ici que le fichier est dans un sous-répertoire donnees
du répertoire de travail.
heart = read.table("donnees/heart.txt", header = T, sep = "\t")
head(heart)
## age sexe type_douleur pression cholester sucre electro taux_max
## 1 70 masculin D 130 322 A C 109
## 2 67 feminin C 115 564 A C 160
## 3 57 masculin B 124 261 A A 141
## 4 64 masculin D 128 263 A A 105
## 5 74 feminin B 120 269 A C 121
## 6 65 masculin D 120 177 A A 140
## angine depression pic vaisseau coeur
## 1 non 2.4 2 D presence
## 2 non 1.6 2 A absence
## 3 non 0.3 1 A presence
## 4 oui 0.2 2 B absence
## 5 oui 0.2 1 B absence
## 6 non 0.4 1 A absence
Il est aussi possible d’écrire un fichier texte à partir d’un data.frame
, en spécifiant aussi les paramètres d’écriture. Par exemple, le code suivant écrit les données heart_bis
dans un autre formalisme.
"%"
","
), comme en français""
ou de ''
autour des chaînes de caractèreswrite.table(heart, file = "donnees/heart_bis.txt", sep = "%",
row.names = FALSE, col.names = TRUE, dec = ",", quote = FALSE)
Il est parfois difficile de lire directement avec la commande read.table()
ou ses dérivés. On peut utiliser dans ce cas la commande readLines()
, qui comme son nom l’indique, lit les lignes les unes après les autres. Elle renvoie un tableau de chaîne de caractères, chaque valeur du tableau correspondant à une ligne.
heart_lignes = readLines("donnees/heart.txt")
length(heart_lignes)
## [1] 271
heart_lignes[1]
## [1] "age\tsexe\ttype_douleur\tpression\tcholester\tsucre\telectro\ttaux_max\tangine\tdepression\tpic\tvaisseau\tcoeur"
heart_lignes[2]
## [1] "70\tmasculin\tD\t130\t322\tA\tC\t109\tnon\t2.4\t2\tD\tpresence"
Dans R
, tout objet peut avoir un ou plusieurs attributs, en particulier les data.frame
s, comme par exemple la classe de l’objet, le nom des colonnes, et le nom des lignes. On peut avoir la liste des attributs avec la commande attributes()
. Celle-ci nous renvoie une list
contenant des objets nommés.
attributes(mtcars)
## $names
## [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
## [11] "carb"
##
## $row.names
## [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"
##
## $class
## [1] "data.frame"
On peut accéder à chaque objet de cette liste via le nom de l’objet, de deux façons différentes, comme présenté ci-dessous.
attributes(mtcars)$names
## [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
## [11] "carb"
attr(mtcars, "names")
## [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
## [11] "carb"
Il est aussi possible de définir de nouveaux attributs à un data.frame
, via la commande attr()
. Celui-ci ne sera pas visible lorsqu’on l’affichera, mais auquel on pourra accéder directement avec les commandes ci-dessus.
attr(mtcars, "info") = "Ce jeu de données présentes des informations sur 32 voitures, décrites par 11 variables"
mtcars$info
## NULL
attributes(mtcars)
## $names
## [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
## [11] "carb"
##
## $row.names
## [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"
##
## $class
## [1] "data.frame"
##
## $info
## [1] "Ce jeu de données présentes des informations sur 32 voitures, décrites par 11 variables"
attr(mtcars, "info")
## [1] "Ce jeu de données présentes des informations sur 32 voitures, décrites par 11 variables"
Comme dans tous les systèmes, les dates sous R
sont stockées sous forme d’entiers représentant un nombre de jours depuis une certaine date, sous le format Date
. Ci-dessous, nous voyons comment récupérer la date du jour, le nombre de jour depuis l’origine, et le calcul de la date d’origine. Il y a aussi deux exemples d’affichage amélioré d’une date (la date du jour ici).
# Date du jour
Sys.Date()
## [1] "2017-09-25"
# Entier stocké
as.numeric(Sys.Date())
## [1] 17434
# Date d'origine (et exemple de soustraction de jours d'une date)
Sys.Date() - as.numeric(Sys.Date())
## [1] "1970-01-01"
# Affichage d'une date avec un format spécifique
format(Sys.Date(), "jour : %d ou %e, mois : %m, année : %y ou %Y")
## [1] "jour : 25 ou 25, mois : 09, année : 17 ou 2017"
# Affichage d'une date dépendant de la langue locale
format(Sys.Date(), "%a %e %b ou %A %e %B")
## [1] "lun. 25 sept. ou lundi 25 septembre"
Il est aussi possible de transformer une chaîne de caractère en Date
avec la fonction as.Date()
. Celle-ci prend en paramètre obligatoire un vecteur de chaînes (éventuellement avec une seule valeur), et de façon optionnelle le format de la date. Voici quelques exemples d’utilisations de cette fonction, avec la présentation des fonctions weekdays()
, months()
, quarters()
et julian()
.
# Tentative de conversion d'une date écrite en "français"
as.Date("09/11/2016")
## [1] "9-11-20"
# En spécifiant le format, tout est ok
as.Date("09/11/2016", "%d/%m/%Y")
## [1] "2016-11-09"
# Récupération d'informations de cette date
d = as.Date("09/11/2016", "%d/%m/%Y")
weekdays(d) # jour de la semaine
## [1] "mercredi"
months(d) # mois dans l'année
## [1] "novembre"
quarters(d) # trimestre dans l'année
## [1] "Q4"
julian(d) # nombre de jour depuis l'origine (éventuellement spécifié, cf ci-dessous)
## [1] 17114
## attr(,"origin")
## [1] "1970-01-01"
julian(d, as.Date("1900-01-01"))
## [1] 42681
## attr(,"origin")
## [1] "1900-01-01"
Nous 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 fonction 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
La première étape ici est donc d’importer les données. Il faut pour cela utiliser la fonction read.table()
, en évitant que les variables textuelles deviennent des factors
. Il faut aussi renommer les variables pour chaque table, selon les informations fournies dans le PDF associé aux données. Il faut aussi gérer les dates pour qu’elles soient correctement représentées. Pour certaines variables, nous avons le descriptif des modalités dans ce document. Enfin, il faudrait ajouter le court descriptif de chaque table comme attribut de celles-ci.
statistique
, valeur
) :
NB :
"xx %"
et "xx,xx"
) et donc à modifier avant calcul."cutanée;orale;sublinguale"
). Il faut donc ici aussi faire un pré-traitement.