SAVOR practicals 2

dplyr

# install.packages("dplyr")
library(dplyr)
naissance <- read.delim("../Data/naissance.txt")

gtsummary::tbl_summary(naissance)
Characteristic N = 1891
ID 123 (68, 176)
AGE 23 (19, 26)
LWT 121 (110, 140)
RACE
    1 96 (51%)
    2 26 (14%)
    3 67 (35%)
SMOKE 74 (39%)
PTL
    0 159 (84%)
    1 24 (13%)
    2 5 (2.6%)
    3 1 (0.5%)
HT 12 (6.3%)
UI 28 (15%)
FVT
    0 100 (53%)
    1 47 (25%)
    2 30 (16%)
    3 7 (3.7%)
    4 4 (2.1%)
    6 1 (0.5%)
BWT 2,977 (2,414, 3,475)
1 Median (IQR); n (%)
str(naissance)
'data.frame':   189 obs. of  10 variables:
 $ ID   : int  85 86 87 88 89 91 92 93 94 95 ...
 $ AGE  : int  19 33 20 21 18 21 22 17 29 26 ...
 $ LWT  : int  182 155 105 108 107 124 118 103 123 113 ...
 $ RACE : int  2 3 1 1 1 3 1 3 1 1 ...
 $ SMOKE: int  0 0 1 1 1 0 0 0 1 1 ...
 $ PTL  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ HT   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ UI   : int  1 0 0 1 1 0 0 0 0 0 ...
 $ FVT  : int  0 3 1 2 0 0 1 1 1 0 ...
 $ BWT  : int  2523 2551 2557 2594 2600 2622 2637 2637 2663 2665 ...
naissance$SMOKE <- factor(naissance$SMOKE, labels = c("Non-Fumeur", "Fumeur"))
str(naissance)
'data.frame':   189 obs. of  10 variables:
 $ ID   : int  85 86 87 88 89 91 92 93 94 95 ...
 $ AGE  : int  19 33 20 21 18 21 22 17 29 26 ...
 $ LWT  : int  182 155 105 108 107 124 118 103 123 113 ...
 $ RACE : int  2 3 1 1 1 3 1 3 1 1 ...
 $ SMOKE: Factor w/ 2 levels "Non-Fumeur","Fumeur": 1 1 2 2 2 1 1 1 2 2 ...
 $ PTL  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ HT   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ UI   : int  1 0 0 1 1 0 0 0 0 0 ...
 $ FVT  : int  0 3 1 2 0 0 1 1 1 0 ...
 $ BWT  : int  2523 2551 2557 2594 2600 2622 2637 2637 2663 2665 ...

Exercice 0

  1. Chargement du fichier de données avec NA
naissance_na <- read.csv("../Data/naissance_na.txt", sep=";")
  1. Investigation de LWT
str(naissance_na)
'data.frame':   189 obs. of  10 variables:
 $ ID   : int  85 86 87 88 89 91 92 93 94 95 ...
 $ AGE  : int  19 33 20 21 18 21 22 17 29 26 ...
 $ LWT  : chr  "." "155" "105" "108" ...
 $ RACE : int  2 3 1 1 1 3 1 3 1 1 ...
 $ SMOKE: int  0 0 1 1 1 0 0 0 1 1 ...
 $ PTL  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ HT   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ UI   : int  1 0 0 1 1 0 0 0 0 0 ...
 $ FVT  : int  0 3 1 2 0 0 1 1 1 0 ...
 $ BWT  : int  2523 2551 2557 2594 2600 2622 2637 2637 2663 2665 ...
  1. Solution avec na.strings = "."
naissance_na <- read.csv("../Data/naissance_na.txt", sep=";", na.strings = ".")
str(naissance_na)
'data.frame':   189 obs. of  10 variables:
 $ ID   : int  85 86 87 88 89 91 92 93 94 95 ...
 $ AGE  : int  19 33 20 21 18 21 22 17 29 26 ...
 $ LWT  : int  NA 155 105 108 107 124 118 103 123 113 ...
 $ RACE : int  2 3 1 1 1 3 1 3 1 1 ...
 $ SMOKE: int  0 0 1 1 1 0 0 0 1 1 ...
 $ PTL  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ HT   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ UI   : int  1 0 0 1 1 0 0 0 0 0 ...
 $ FVT  : int  0 3 1 2 0 0 1 1 1 0 ...
 $ BWT  : int  2523 2551 2557 2594 2600 2622 2637 2637 2663 2665 ...
  1. transform()
naissance_na <-  transform(naissance_na,
  RACE = factor(RACE, labels = c("blanche", "noire", "autres")),
  HT = factor(HT, labels = c("non", "oui")),
  UI = factor(UI, labels = c("non", "oui")))
str(naissance_na)
'data.frame':   189 obs. of  10 variables:
 $ ID   : int  85 86 87 88 89 91 92 93 94 95 ...
 $ AGE  : int  19 33 20 21 18 21 22 17 29 26 ...
 $ LWT  : int  NA 155 105 108 107 124 118 103 123 113 ...
 $ RACE : Factor w/ 3 levels "blanche","noire",..: 2 3 1 1 1 3 1 3 1 1 ...
 $ SMOKE: int  0 0 1 1 1 0 0 0 1 1 ...
 $ PTL  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ HT   : Factor w/ 2 levels "non","oui": 1 1 1 1 1 1 1 1 1 1 ...
 $ UI   : Factor w/ 2 levels "non","oui": 2 1 1 2 2 1 1 1 1 1 ...
 $ FVT  : int  0 3 1 2 0 0 1 1 1 0 ...
 $ BWT  : int  2523 2551 2557 2594 2600 2622 2637 2637 2663 2665 ...
  1. transform() encore
naissance_na <-  transform(naissance_na,
  POIDS = LWT * 453,
  RAPPORT = BWT/POIDS
)
Error in eval(substitute(list(...)), `_data`, parent.frame()): object 'POIDS' not found
naissance_na <-  transform(naissance_na, POIDS = LWT * 453)
naissance_na <-  transform(naissance_na, RAPPORT = BWT/POIDS)
str(naissance_na)
'data.frame':   189 obs. of  12 variables:
 $ ID     : int  85 86 87 88 89 91 92 93 94 95 ...
 $ AGE    : int  19 33 20 21 18 21 22 17 29 26 ...
 $ LWT    : int  NA 155 105 108 107 124 118 103 123 113 ...
 $ RACE   : Factor w/ 3 levels "blanche","noire",..: 2 3 1 1 1 3 1 3 1 1 ...
 $ SMOKE  : int  0 0 1 1 1 0 0 0 1 1 ...
 $ PTL    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ HT     : Factor w/ 2 levels "non","oui": 1 1 1 1 1 1 1 1 1 1 ...
 $ UI     : Factor w/ 2 levels "non","oui": 2 1 1 2 2 1 1 1 1 1 ...
 $ FVT    : int  0 3 1 2 0 0 1 1 1 0 ...
 $ BWT    : int  2523 2551 2557 2594 2600 2622 2637 2637 2663 2665 ...
 $ POIDS  : num  NA 70215 47565 48924 48471 ...
 $ RAPPORT: num  NA 0.0363 0.0538 0.053 0.0536 ...
  1. dplyr::mutate()
naissance_na <- dplyr::mutate(naissance_na,
                              POIDS2 = LWT * 453,
                              RAPPORT2 = BWT/POIDS2)
str(naissance_na)
'data.frame':   189 obs. of  14 variables:
 $ ID      : int  85 86 87 88 89 91 92 93 94 95 ...
 $ AGE     : int  19 33 20 21 18 21 22 17 29 26 ...
 $ LWT     : int  NA 155 105 108 107 124 118 103 123 113 ...
 $ RACE    : Factor w/ 3 levels "blanche","noire",..: 2 3 1 1 1 3 1 3 1 1 ...
 $ SMOKE   : int  0 0 1 1 1 0 0 0 1 1 ...
 $ PTL     : int  0 0 0 0 0 0 0 0 0 0 ...
 $ HT      : Factor w/ 2 levels "non","oui": 1 1 1 1 1 1 1 1 1 1 ...
 $ UI      : Factor w/ 2 levels "non","oui": 2 1 1 2 2 1 1 1 1 1 ...
 $ FVT     : int  0 3 1 2 0 0 1 1 1 0 ...
 $ BWT     : int  2523 2551 2557 2594 2600 2622 2637 2637 2663 2665 ...
 $ POIDS   : num  NA 70215 47565 48924 48471 ...
 $ RAPPORT : num  NA 0.0363 0.0538 0.053 0.0536 ...
 $ POIDS2  : num  NA 70215 47565 48924 48471 ...
 $ RAPPORT2: num  NA 0.0363 0.0538 0.053 0.0536 ...

Exercice 1 : Selection de colonnes

  1. 10 manières de sélectionner les colonnes
  • #1: le $
str(naissance$AGE)
typeof(naissance$AGE)
 int [1:189] 19 33 20 21 18 21 22 17 29 26 ...
[1] "integer"
  • #2 & #3: le [[
str(naissance[[2]])
str(naissance[["vAGE"]])
typeof(naissance[["AGE"]])
 int [1:189] 19 33 20 21 18 21 22 17 29 26 ...
 NULL
[1] "integer"
  • #4,5 & 6 : le [,]
str(naissance[, 2])
str(naissance[, "AGE"])
typeof(naissance[, "AGE"])
str(naissance[, "AGE", drop=FALSE])
typeof(naissance[, "AGE", drop=FALSE])
 int [1:189] 19 33 20 21 18 21 22 17 29 26 ...
 int [1:189] 19 33 20 21 18 21 22 17 29 26 ...
[1] "integer"
'data.frame':   189 obs. of  1 variable:
 $ AGE: int  19 33 20 21 18 21 22 17 29 26 ...
[1] "list"
  • #7 & 8 : le [
str(naissance[2])
typeof(naissance[2])
str(naissance["AGE"])
'data.frame':   189 obs. of  1 variable:
 $ AGE: int  19 33 20 21 18 21 22 17 29 26 ...
[1] "list"
'data.frame':   189 obs. of  1 variable:
 $ AGE: int  19 33 20 21 18 21 22 17 29 26 ...
  • #9 & 10 : subset()
str(subset(naissance, select = 2))
str(subset(naissance, select = "AGE"))
str(subset(naissance, select = AGE))
'data.frame':   189 obs. of  1 variable:
 $ AGE: int  19 33 20 21 18 21 22 17 29 26 ...
'data.frame':   189 obs. of  1 variable:
 $ AGE: int  19 33 20 21 18 21 22 17 29 26 ...
'data.frame':   189 obs. of  1 variable:
 $ AGE: int  19 33 20 21 18 21 22 17 29 26 ...
  1. dplyr::select()
str(dplyr::select(naissance, 2))
'data.frame':   189 obs. of  1 variable:
 $ AGE: int  19 33 20 21 18 21 22 17 29 26 ...
str(dplyr::select(naissance, AGE))
'data.frame':   189 obs. of  1 variable:
 $ AGE: int  19 33 20 21 18 21 22 17 29 26 ...

Exercice 2

head(naissance$c("ID", "AGE", "LWT", "SMOKE"))
Error in head(naissance$c("ID", "AGE", "LWT", "SMOKE")): attempt to apply non-function
head(naissance[[c(1:3, 5)]])
Error in .subset2(x, i, exact = exact): recursive indexing failed at level 2
head(naissance[[c("ID", "AGE", "LWT", "SMOKE")]])
Error in .subset2(x, i, exact = exact): recursive indexing failed at level 2
head(naissance[c(1:3, 5)])
  ID AGE LWT      SMOKE
1 85  19 182 Non-Fumeur
2 86  33 155 Non-Fumeur
3 87  20 105     Fumeur
4 88  21 108     Fumeur
5 89  18 107     Fumeur
6 91  21 124 Non-Fumeur
head(naissance[c("ID", "AGE", "LWT", "SMOKE")])
  ID AGE LWT      SMOKE
1 85  19 182 Non-Fumeur
2 86  33 155 Non-Fumeur
3 87  20 105     Fumeur
4 88  21 108     Fumeur
5 89  18 107     Fumeur
6 91  21 124 Non-Fumeur
head(naissance[,c(1:3, 5)])
  ID AGE LWT      SMOKE
1 85  19 182 Non-Fumeur
2 86  33 155 Non-Fumeur
3 87  20 105     Fumeur
4 88  21 108     Fumeur
5 89  18 107     Fumeur
6 91  21 124 Non-Fumeur
head(naissance[, c("ID", "AGE", "LWT", "SMOKE")])
  ID AGE LWT      SMOKE
1 85  19 182 Non-Fumeur
2 86  33 155 Non-Fumeur
3 87  20 105     Fumeur
4 88  21 108     Fumeur
5 89  18 107     Fumeur
6 91  21 124 Non-Fumeur
head(subset(naissance, select = c(1:3, 5)))
  ID AGE LWT      SMOKE
1 85  19 182 Non-Fumeur
2 86  33 155 Non-Fumeur
3 87  20 105     Fumeur
4 88  21 108     Fumeur
5 89  18 107     Fumeur
6 91  21 124 Non-Fumeur
head(subset(naissance, select = c("ID", "AGE", "LWT", "SMOKE")))
  ID AGE LWT      SMOKE
1 85  19 182 Non-Fumeur
2 86  33 155 Non-Fumeur
3 87  20 105     Fumeur
4 88  21 108     Fumeur
5 89  18 107     Fumeur
6 91  21 124 Non-Fumeur
head(subset(naissance, select = c(ID, AGE, LWT, SMOKE)))
  ID AGE LWT      SMOKE
1 85  19 182 Non-Fumeur
2 86  33 155 Non-Fumeur
3 87  20 105     Fumeur
4 88  21 108     Fumeur
5 89  18 107     Fumeur
6 91  21 124 Non-Fumeur
head(dplyr::select(naissance, ID, AGE, LWT, SMOKE))
  ID AGE LWT      SMOKE
1 85  19 182 Non-Fumeur
2 86  33 155 Non-Fumeur
3 87  20 105     Fumeur
4 88  21 108     Fumeur
5 89  18 107     Fumeur
6 91  21 124 Non-Fumeur

Exercice 3

premiers <-  naissance[1:5, ]
n <- nrow(naissance)
derniers <-  naissance[(n-5):n, ]
dplyr::slice(naissance, 1:5)
  ID AGE LWT RACE      SMOKE PTL HT UI FVT  BWT
1 85  19 182    2 Non-Fumeur   0  0  1   0 2523
2 86  33 155    3 Non-Fumeur   0  0  0   3 2551
3 87  20 105    1     Fumeur   0  0  0   1 2557
4 88  21 108    1     Fumeur   0  0  1   2 2594
5 89  18 107    1     Fumeur   0  0  1   0 2600
dplyr::slice(naissance, (n-5):n)
  ID AGE LWT RACE      SMOKE PTL HT UI FVT  BWT
1 78  14 101    3     Fumeur   1  0  0   0 2466
2 79  28  95    1     Fumeur   0  0  0   2 2466
3 81  14 100    3 Non-Fumeur   0  0  0   2 2495
4 82  23  94    3     Fumeur   0  0  0   0 2495
5 83  17 142    2 Non-Fumeur   0  1  0   0 2495
6 84  21 130    1     Fumeur   0  1  0   3 2495
derns <- dplyr::slice_tail(naissance, n=5)
knitr::kable(derns)
ID AGE LWT RACE SMOKE PTL HT UI FVT BWT
79 28 95 1 Fumeur 0 0 0 2 2466
81 14 100 3 Non-Fumeur 0 0 0 2 2495
82 23 94 3 Fumeur 0 0 0 0 2495
83 17 142 2 Non-Fumeur 0 1 0 0 2495
84 21 130 1 Fumeur 0 1 0 3 2495