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() :

  • Moyenne
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
  • Ecart-type
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
  • Infos sur 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
  • Moyenne et médiane
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)

Manipulation

  1. Créer un nouveau data.frame avec uniquement les individus masculins ayant un problème cardiaque
heart1 = subset(heart, subset = sexe == "masculin" & coeur == "presence")
  1. Avec ces données, en créer un autre ne gardant que les variables suivantes :
    • type_douleur, sucre, electro, et vaisseau
    • angine, depression
heart2 = subset(heart1, select = c(type_douleur, sucre, electro, vaisseau, angine, depression))
  1. Créer un nouveau data.frame à partir de ce data.frame, avec
    1. une variable nbA comptant le nombre de fois où une variable des variables suivantes est égale à A : type_douleur, sucre, electro, et vaisseau
    2. une variable flag avec les deux modalités suivantes :
      • "problème" : angine à "oui" et depression supérieur ou égal à 4.0
      • "attention" : sinon
heart3 = 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"))
)

Agrégats

  1. Comparer le cholesterol selon la présence ou non de problème de coeur
agg1 = aggregate(cholester ~ coeur, heart, mean)
agg1
     coeur cholester
1  absence  244.2133
2 presence  256.4667
  1. Calculer le nombre de personnes concernés par un problème de coeur
agg2 = aggregate(cholester ~ coeur, heart, length)
agg2
     coeur cholester
1  absence       150
2 presence       120
  1. Fusionner les deux data.frames précédement créés pour avoir les informations en une seule table
setNames(merge(agg1, agg2, by = "coeur"), c("coeur", "cholesterol", "effectifs"))
     coeur cholesterol effectifs
1  absence    244.2133       150
2 presence    256.4667       120
  1. Calculer les moyennes de chaque variable quantitative selon la présence ou non de problème de coeur
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
  1. Comparer l’âge selon la présence ou de problème de coeur et de problème d’angine
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