R
- STID 2ème annéeiris
A partir des données iris
, déjà présentes dans R
, créer les tableaux suivantes, à l’aide des fonctions aggregate()
et merge()
:
aggregate(. ~ Species, iris, mean)
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
aggregate(. ~ Species, iris, sd)
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
aggregate(Sepal.Length ~ Species, iris, summary)
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
setNames(
merge(
aggregate(Sepal.Length ~ Species, iris, mean),
aggregate(Sepal.Length ~ Species, iris, median),
by = "Species"
),
c("Espèce", "Moyenne", "Médiane")
)
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
.
heart = read.table("donnees/heart.txt", header = T)
data.frame
avec uniquement les individus masculins ayant un problème cardiaqueheart1 = subset(heart, subset = sexe == "masculin" & coeur == "presence")
type_douleur
, sucre
, electro
, et vaisseau
angine
, depression
heart2 = subset(heart1, select = c(type_douleur, sucre, electro, 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"
: sinonheart3 = transform(
heart2,
nbA = (type_douleur == "A") + (sucre == "A") + (electro == "A") + (vaisseau == "A"),
flag = factor(angine == "oui" & depression >= 4, labels = c("attention", "problème"))
)
On peut aussi tout faire en une seule grosse opération.
heart.nouveau = transform(
subset(heart1,
subset = sexe == "masculin" & coeur == "presence",
select = c(type_douleur, sucre, electro, vaisseau, angine, depression)),
nbA = (type_douleur == "A") + (sucre == "A") + (electro == "A") + (vaisseau == "A"),
flag = factor(angine == "oui" & depression >= 4, labels = c("attention", "problème"))
)
agg1 = aggregate(cholester ~ coeur, heart, mean)
agg1
coeur cholester
1 absence 244.2133
2 presence 256.4667
agg2 = aggregate(cholester ~ coeur, heart, length)
agg2
coeur cholester
1 absence 150
2 presence 120
data.frame
s précédement créés pour avoir les informations en une seule tablesetNames(merge(agg1, agg2, by = "coeur"), c("coeur", "cholesterol", "effectifs"))
coeur cholesterol effectifs
1 absence 244.2133 150
2 presence 256.4667 120
aggregate(. ~ coeur,
subset(heart, select = c(coeur, age, pression, cholester, taux_max, depression)),
mean)
coeur age pression cholester taux_max depression
1 absence 52.70667 128.8667 244.2133 158.3333 0.6226667
2 presence 56.59167 134.4417 256.4667 138.8583 1.5841667
aggregate(age ~ angine + coeur, heart, mean)
angine coeur age
1 non absence 52.54331
2 oui absence 53.60870
3 non presence 56.77778
4 oui presence 56.43939