IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Cours complet pour apprendre R avec une pratique pour l'analyse de données sociologiques

Image non disponible R pour les sociologues (et assimilés)


précédentsommairesuivant

Annexe C Solutions des exercices

Solution de l'exercice 2.1

 
Sélectionnez
R> c(12, 13, 14, 15, 16)
[1] 12 13 14 15 16

Solution de l'exercice 2.2

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
R> c(1, 2, 3, 4)
[1] 1 2 3 4
R> 1:4
[1] 1 2 3 4
R> c(1, 2, 3, 4, 8, 9, 10, 11)
[1] 1 2 3 4 8 9 10 11
R> c(1:4, 8:11)
[1] 1 2 3 4 8 9 10 11
R> c(2, 4, 6, 8)
[1] 2 4 6 8
R> 1:4 * 2
[1] 2 4 6 8

Solution de l'exercice 2.3

 
Sélectionnez
1.
2.
3.
4.
5.
R> chef <- c(1200, 1180, 1750, 2100)
R> conjoint <- c(1450, 1870, 1690, 0)
R> nb.personnes <- c(4, 2, 3, 2)
R> (chef + conjoint)/nb.personnes
[1] 662.500 1525.000 1146.667 1050.000

Solution de l'exercice 2.4

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
R> chef <- c(1200, 1180, 1750, 2100)
R> min(chef)
[1] 1180
R> max(chef)
[1] 2100
R> chef.na <- c(1200, 1180, 1750, NA)
R> min(chef.na)
[1] NA
R> max(chef.na)
[1] NA
R> min(chef.na, na.rm = TRUE)
[1] 1180
R> max(chef.na, na.rm = TRUE)
[1] 1750

Solution de l'exercice 3.5

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
R> library(rgrs)
R> data(hdv2003)
R> df <- hdv2003
R> str(df)
'data.frame':       2000 obs. of 20 variables:
$ id           : int 1 2 3 4 5 6 7 8 9 10 ...
$ age          : int 28 23 59 34 71 35 60 47 20 28 ...
$ sexe         : Factor w/ 2 levels "Homme","Femme": 2 2 1 1 2 2 2 1 2 1 ...
$ nivetud      : Factor w/ 8 levels "N'a jamais fait d'etudes",..: 8 NA 3 8 3 6 3 6 NA 7 ...
$ poids        : num 2634 9738 3994 5732 4329 ...
$ occup        : Factor w/ 7 levels "Exerce une profession",..: 1 3 1 1 4 1 6 1 3 1 ...
$ qualif       : Factor w/ 7 levels "Ouvrier specialise",..: 6 NA 3 3 6 6 2 2 NA 7 ...
$ freres.soeurs: int 8 2 2 1 0 5 1 5 4 2 ...
$ clso         : Factor w/ 3 levels "Oui","Non","Ne sait pas": 1 1 2 2 1 2 1 2 1 2 ...
$ relig        : Factor w/ 6 levels "Pratiquant regulier",..: 4 4 4 3 1 4 3 4 3 2 ...
$ trav.imp     : Factor w/ 4 levels "Le plus important",..: 4 NA 2 3 NA 1 NA 4 NA 3 ...
$ trav.satisf  : Factor w/ 3 levels "Satisfaction",..: 2 NA 3 1 NA 3 NA 2 NA 1 ...
$ hard.rock    : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
$ lecture.bd   : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
$ peche.chasse : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 2 2 1 1 ...
$ cuisine      : Factor w/ 2 levels "Non","Oui": 2 1 1 2 1 1 2 2 1 1 ...
$ bricol       : Factor w/ 2 levels "Non","Oui": 1 1 1 2 1 1 1 2 1 1 ...
$ cinema       : Factor w/ 2 levels "Non","Oui": 1 2 1 2 1 2 1 1 2 2 ...
$ sport        : Factor w/ 2 levels "Non","Oui": 1 2 2 2 1 2 1 1 1 2 ...
$ heures.tv    : num 0 1 0 2 3 2 2.9 1 2 2 ...

Solution de l'exercice 3.6

Utilisez la fonction suivante et corrigez manuellement les erreurs :

 
Sélectionnez
R> df.ok <- edit(df)

Attention à ne pas utiliser la fonction fix dans ce cas, celle-ci modifierait directement le contenu de df.

Puis utilisez la fonction head :

 
Sélectionnez
R> head(df.ok, 4)

Solution de l'exercice 3.7

 
Sélectionnez
1.
2.
3.
4.
R> summary(df$age)
R> hist(df$age, breaks = 10, main = "Répartition des âges", xlab = "Âge", ylab = "Effectif")
R> boxplot(df$age)
R> plot(table(df$age), main = "Répartition des âges", xlab = "Âge", ylab = "Effectif")

Solution de l'exercice 3.8

 
Sélectionnez
1.
2.
3.
4.
R> table(df$trav.imp)
R> summary(df$trav.imp)
R> freq(df$trav.imp)
R> dotchart(table(df$trav.imp))

Solution de l'exercice 4.9

Utilisez la fonction read.table ou l'un de ses dérivés, en fonction du tableur utilisé et du format d'enregistrement.

Pour vérifier que l'importation s'est bien passée, on peut utiliser les fonctions str, dim, éventuellement edit et faire quelques tris à plat.

Solution de l'exercice 4.10

Utilisez la fonction read.dbf de l'extension foreign.

Solution de l'exercice 5.11

 
Sélectionnez
1.
2.
3.
4.
5.
R> library(rgrs)
R> data(hdv2003)
R> d <- hdv2003
R> d <- renomme.variable(d, "clso", "classes.sociales")
R> d <- renomme.variable(d, "classes.sociales", "clso")

Solution de l'exercice 5.12

 
Sélectionnez
1.
2.
3.
4.
R> d$clso <- factor(d$clso, levels = c("Non", "Ne sait pas",  "Oui"))
R> table(d$clso)
        Non Ne sait pas         Oui
       1037          27         936

Solution de l'exercice 5.13

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
R> d$cinema[1:3]
[1] Non Oui Non
Levels: Non Oui
R> d$lecture.bd[12:30]
 [1] Non Non Non Non Non Non Non Non Non Non Non Non Non Non Non Non Non
[18] Non Non
Levels: Non Oui
R> d[c(5, 12), c(4, 8)]
                             nivetud freres.soeurs
5  Derniere annee d'etudes primaires             0
12                        2eme cycle             4
R> longueur <- length(d$age)
R> tail(d$age, 4)
[1] 46 24 24 66

Solution de l'exercice 5.14

 
Sélectionnez
1.
2.
3.
4.
5.
6.
R> subset(d, lecture.bd == "Oui", select = c(age, sexe))
R> subset(d, occup != "Chômeur", select = -cinema)
R> subset(d, age >= 45 & hard.rock == "Oui", select = id)
R> subset(d, sexe == "Femme" & age >= 25 & age <= 40 & sport == "Non")
R> subset(d, sexe == "Homme" & freres.soeurs >= 2 & freres.soeurs <=
+     4 & (cuisine == "Oui" | bricol == "Oui"))

Solution de l'exercice 5.15

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
R> d.bd.oui <- subset(d, lecture.bd == "Oui")
R> d.bd.non <- subset(d, lecture.bd == "Non")
R> mean(d.bd.oui$heures.tv)
[1] 1.763830
R> mean(d.bd.non$heures.tv, na.rm = TRUE)
[1] 2.258214
R> tapply(d$heures.tv, d$lecture.bd, mean, na.rm = TRUE)
     Non      Oui
2.258214 1.763830

Solution de l'exercice 5.16

 
Sélectionnez
1.
2.
3.
4.
5.
6.
R> d$fs.char <- as.character(d$freres.soeurs)
R> d$fs.fac <- factor(d$fs.char)
R> d$fs.num <- as.numeric(as.character(d$fs.char))
R> table(d$fs.num == d$freres.soeurs)
TRUE
2000

Solution de l'exercice 5.17

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
R> d$fs1 <- cut(d$freres.soeurs, 5)
R> table(d$fs1)
(-0.022,4.39] (4.39,8.8] (8.8,13.2] (13.2,17.6] (17.6,22]
         1495        396         97           9         3
R> d$fs2 <- cut(d$freres.soeurs, breaks = c(0, 2, 4, 19), include.lowest = TRUE,
+     labels = c("de 0 à 2", "de 2 à 4", "plus de 4"))
R> table(d$fs2)
 de 0 à 2  de 2 à 4 plus de 4
     1001       494       504
R> d$fs3 <- quant.cut(d$freres.soeurs, 3)
R> table(d$fs3)
[0,2) [2,4) [4,22]
  574   711    715

Solution de l'exercice 5.18

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
R> d$trav.imp2cl[d$trav.imp == "Le plus important" | d$trav.imp ==
+     "Aussi important que le reste"] <- "Le plus ou aussi important"
R> d$trav.imp2cl[d$trav.imp == "Moins important que le reste" |
+     d$trav.imp == "Peu important"] <- "moins ou peu important"
R> table(d$trav.imp)
            Le plus important  Aussi important que le reste
                           29                           259
 Moins important que le reste                 Peu important
                       708 52
R> table(d$trav.imp2cl)
 Le plus ou aussi important  moins ou peu important
                        288                     760
R> table(d$trav.imp, d$trav.imp2cl)
                             Le plus ou aussi important
           Le plus important                         29
Aussi important que le reste                        259
Moins important que le reste                          0
               Peu important                          0

                                 moins ou peu important
           Le plus important                          0
Aussi important que le reste                          0
Moins important que le reste                        708
               Peu important                         52
R> d$relig.4cl <- as.character(d$relig)
R> d$relig.4cl[d$relig == "Pratiquant regulier" | d$relig ==
+     "Pratiquant occasionnel"] <- "Pratiquant"
R> d$relig.4cl[d$relig == "NSP ou NVPR"] <- NA
R> table(d$relig.4cl, d$relig, exclude = NULL)
                             Pratiquant regulier Pratiquant occasionnel
Appartenance sans pratique                     0                      0
Ni croyance ni appartenance                    0                      0
Pratiquant                                   266                    442
Rejet                                          0                      0
<NA>                                           0                      0

                            Appartenance sans pratique
Appartenance sans pratique                         760
Ni croyance ni appartenance                          0
Pratiquant                                           0
Rejet                                                0
<NA>                                                 0

                             Ni croyance ni appartenance Rejet
Appartenance sans pratique                                0  0
Ni croyance ni appartenance                             399  0
Pratiquant                                                0  0
Rejet                                                     0 93
<NA>                                                      0  0

                             NSP ou NVPR <NA>
Appartenance sans pratique               0  0
Ni croyance ni appartenance              0  0
Pratiquant                               0  0
Rejet                                    0  0
<NA>                                    40  0

Solution de l'exercice 5.19

Attention, l'ordre des opérations a toute son importance !

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
R> d$var <- "Autre"
R> d$var[d$sexe == "Femme" & d$bricol == "Oui"] <- "Femme faisant du bricolage"
R> d$var[d$sexe == "Homme" & d$age > 30] <- "Homme de plus de 30 ans"
R> d$var[d$sexe == "Homme" & d$age > 40 & d$lecture.bd == "Oui"] <- "Homme de plus de 40 ans lecteur de BD"
R> table(d$var)
                                Autre
                                  925
           Femme faisant du bricolage
                                  338
              Homme de plus de 30 ans
                                  728
Homme de plus de 40 ans lecteur de BD
                                    9
R> table(d$var, d$sexe)
                                        Homme Femme
Autre                                     162   763
Femme faisant du bricolage                  0   338
Homme de plus de 30 ans                   728     0
Homme de plus de 40 ans lecteur de BD       9     0
R> table(d$var, d$bricol)
                                         Non  Oui
Autre                                    847   78
Femme faisant du bricolage                 0  338
Homme de plus de 30 ans                  298  430
Homme de plus de 40 ans lecteur de BD      2    7
R> table(d$var, d$lecture.bd)
                                        Non Oui
Autre                                   905  20
Femme faisant du bricolage              324  14
Homme de plus de 30 ans                 724   4
Homme de plus de 40 ans lecteur de BD     0   9
R> table(d$var, d$age > 30)
                                       FALSE TRUE
Autre                                    283  642
Femme faisant du bricolage                68  270
Homme de plus de 30 ans                    0  728
Homme de plus de 40 ans lecteur de BD      0    9
R> table(d$var, d$age > 40)
                                       FALSE TRUE
Autre                                    417  508
Femme faisant du bricolage               152  186
Homme de plus de 30 ans                  163  565
Homme de plus de 40 ans lecteur de BD      0    9

Solution de l'exercice 5.20

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
R> d.ord <- d[order(d$freres.soeurs), ]
R> d.ord <- d[order(d$heures.tv, decreasing = TRUE), c("sexe", "heures.tv")]
R> head(d.ord, 10)
      sexe heures.tv
 288 Femme        12
 391 Femme        12
1324 Homme        11
1761 Femme        11
 100 Femme        10
 236 Femme        10
 421 Homme        10
 426 Femme        10
 841 Femme        10
1075 Homme        10

précédentsommairesuivant

Copyright © 2017 - Julien Barnier. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts