Skip to content

Commit 747b029

Browse files
add new exercises module 06
1 parent b0f1c5f commit 747b029

File tree

11 files changed

+550
-1267
lines changed

11 files changed

+550
-1267
lines changed
Lines changed: 353 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,353 @@
1+
---
2+
title: "Recombinaison de tableaux"
3+
author: "Guyliann Engels & Philippe Grosjean"
4+
description: "**SDD I Module 6** Remodelage de tableaux"
5+
tutorial:
6+
id: "A06La_recombinaison"
7+
version: 1.0.0/5
8+
output:
9+
learnr::tutorial:
10+
progressive: true
11+
allow_skip: true
12+
runtime: shiny_prerendered
13+
---
14+
15+
```{r setup, include=FALSE}
16+
BioDataScience1::learnr_setup()
17+
SciViews::R()
18+
```
19+
20+
```{r, echo=FALSE}
21+
BioDataScience1::learnr_banner()
22+
```
23+
24+
```{r, context="server"}
25+
BioDataScience1::learnr_server(input, output, session)
26+
```
27+
28+
29+
## Objectifs
30+
31+
- Recombiner des tableaux larges en longs
32+
- Recombiner des tableaux longs en larges
33+
- Séparer et unifier des colonnes dans un tableau de données
34+
35+
36+
## De large vers long
37+
38+
Le format long d’un tableau de données correspond à un encodage en un minimum de colonnes, les données étant réparties sur un plus grand nombre de lignes en comparaison du format large qui regroupe les données dans plusieurs colonnes successives. Il est assez courant de devoir transformer un tableau large vers un tableau long. Cela permet souvent d'obtenir un tableau cas par variables correct. La fonction utile pour cela est la fonction pivot_longer()
39+
40+
```{r, eval=FALSE, echo=TRUE}
41+
DF %>.%
42+
pivot_longer(., cols = SELECTION, names_to = NEWVAR1, values_to = NEWVAR2) -> DF1
43+
```
44+
45+
La fonction `pivot_longer()` utilise les arguments suivants :
46+
47+
- `cols =` les variables qui doivent être pivotées
48+
- `names_to =` le nom de la nouvelle variable qui comprend le nom des colonnes pivotées.
49+
- `values_to =` le nom de la nouvelle variable qui comprend les valeurs des colonnes pivotées
50+
51+
52+
```{r wide-init}
53+
time <- 1989:1995
54+
tree <- rep(c("arbre_1", "arbre_2"), each = length(time))
55+
size <- c((time - 1990 + 12)*2, (time - 1990 + 15)*2.5)
56+
57+
long <- tibble(
58+
year = c(time, time),
59+
tree = tree,
60+
circumf = size
61+
)
62+
63+
width <- pivot_wider(long, names_from = year, values_from = circumf)
64+
long1 <- pivot_longer(width, cols= "1989":"1995", names_to = "year", values_to = "circumf")
65+
66+
#long11 <- pivot_longer(width, !tree, names_to = "year", values_to = "circumf")
67+
#long12 <- pivot_longer(width, starts_with("19"), names_to = "year", values_to = "circumf")
68+
```
69+
70+
Sur base du tableau ci-dessous :
71+
72+
```{r}
73+
knitr::kable(width)
74+
```
75+
76+
Modifiez le tableau `width` afin d'obtenir le tableau suivant que vous nommerez `long`:
77+
78+
```{r,}
79+
knitr::kable(long1)
80+
```
81+
82+
### Premiere variantes de l'argument cols
83+
84+
Complétez la fonction suivante afin d'obtenir le tableau `long`.
85+
86+
```{r wide-prep}
87+
time <- 1989:1995
88+
tree <- rep(c("arbre_1", "arbre_2"), each = length(time))
89+
size <- c((time - 1990 + 12)*2, (time - 1990 + 15)*2.5)
90+
91+
long <- tibble(
92+
year = c(time, time),
93+
tree = tree,
94+
circumf = size
95+
)
96+
97+
width <- pivot_wider(long, names_from = year, values_from = circumf)
98+
```
99+
100+
```{r wide1_h3, exercise = TRUE, exercise.setup = "wide-prep"}
101+
___ %>.%
102+
___(., cols = "___":"___", names_to = "___", values_to = "___") -> ___
103+
head(___)
104+
```
105+
106+
```{r wide1_h3-hint-1}
107+
width %>.%
108+
pivot_longer(., cols = "___":"___", names_to = "___", values_to = "___") -> long
109+
head(long)
110+
```
111+
112+
```{r wide1_h3-hint-2}
113+
width %>.%
114+
pivot_longer(., cols = "1989":"1995", names_to = "___", values_to = "___") -> long
115+
head(long)
116+
#### Attention : solution dans le 'hint' suivant! ####
117+
```
118+
119+
```{r wide1_h3-solution}
120+
width %>.%
121+
pivot_longer(., cols = "1989":"1995", names_to = "year", values_to = "circumf") -> long
122+
head(long)
123+
```
124+
125+
```{r wide1_h3-check}
126+
grade_code("Bravo ! Vous venez de réaliser votre premier pivot")
127+
```
128+
129+
### Seconde variante de l'argument cols =
130+
131+
L'argument `cols =` de la fonction pivot accepte plusieurs solutions afin de spécifier les colonnes d'intérêts, tentez cette fois-ci de retirer la colonne qui ne doit pas subir le pivot.
132+
133+
Complétez la fonction suivante afin d'obtenir le tableau `long`.
134+
135+
```{r wide2_h2, exercise = TRUE, exercise.setup = "wide-prep"}
136+
___ %>.%
137+
___(., cols = !___, names_to = "___", values_to = "___") -> ___
138+
head(___)
139+
```
140+
141+
```{r wide2_h2-hint-1}
142+
width %>.%
143+
pivot_longer(., cols = !___, names_to = "year", values_to = "circumf") -> long
144+
head(___)
145+
#### Attention : solution dans le 'hint' suivant! ####
146+
```
147+
148+
```{r wide2_h2-solution}
149+
width %>.%
150+
pivot_longer(., cols = !tree, names_to = "year", values_to = "circumf") -> long
151+
head(long)
152+
```
153+
154+
```{r wide2_h2-check}
155+
grade_code("Bravo ! Vous venez de réaliser votre premier pivot")
156+
```
157+
158+
### Autre variante de l'argument cols =
159+
160+
L'argument `cols =` de la fonction pivot accepte plusieurs solutions afin de spécifier les colonnes d'intérêts, tentez cette fois-ci d'utiliser la fonction start_with() afin de sélectionner les colonnes qui doivent subir le pivot.
161+
162+
Complétez la fonction suivante afin d'obtenir le tableau `long`.
163+
164+
```{r wide3_h2, exercise = TRUE, exercise.setup = "wide-prep"}
165+
___ %>.%
166+
___(., cols = starts_with("___"), names_to = "___", values_to = "___") -> ___
167+
head(___)
168+
```
169+
170+
```{r wide3_h2-hint-1}
171+
width %>.%
172+
pivot_longer(., cols = starts_with("___"), names_to = "year", values_to = "circumf") -> long
173+
head(long)
174+
#### Attention : solution dans le 'hint' suivant! ####
175+
```
176+
177+
```{r wide3_h2-solution}
178+
width %>.%
179+
pivot_longer(., cols = starts_with("19"), names_to = "year", values_to = "circumf") -> long
180+
head(long)
181+
```
182+
183+
```{r wide3_h2-check}
184+
grade_code("Bravo ! Vous venez de réaliser votre troisième pivot")
185+
```
186+
187+
## De long vers large
188+
189+
Il est plus rare de passer d'un tableau long vers un tableau large. Cela est souvent utilisé lorsque l'on souhaite transformer ce tableau afin de le rendre plus compact et présentable dans un rapport ou dans une présentation. La fonction utile pour cette transformation est pivot_wider()
190+
191+
```{r, eval=FALSE, echo=TRUE}
192+
DF %>.%
193+
pivot_wider(., names_from = VAR1, values_from = VAR2) -> DF1
194+
```
195+
196+
La fonction `pivot_wider()` requiert pour l'argument
197+
198+
- `cols =` les variables qui doivent être pivotées
199+
- `names_from =` le nom de la variable dont les valeurs vont être employées comme les noms des nouvelles variables.
200+
- `values_from =` le nom de la variable dont les valeurs vont être employées comme les valeurs des nouvelles variables.
201+
202+
203+
```{r long-init}
204+
gr_age <- c("Jeune", "Adulte","Senior")
205+
period <- c(1992, 1995, 1998)
206+
popu <- c(2185103, 6311109, 1525785,
207+
2196799, 6337067, 1596532,
208+
2180816, 6332857, 1678591)
209+
210+
demography <- tibble(
211+
groupe_age = rep(gr_age, times = 3),
212+
year = rep(period, each= 3),
213+
population = popu
214+
)
215+
216+
demo <- pivot_wider(demography, names_from = year, values_from = population)
217+
#demo1 <- spread(demography, key = year, value = population)
218+
```
219+
220+
Sur base du tableau ci-dessous :
221+
222+
```{r}
223+
knitr::kable(demography)
224+
```
225+
226+
Modifiez le tableau `demography` afin d'obtenir le tableau suivant que vous nommerez `demo`:
227+
228+
```{r}
229+
knitr::kable(demo)
230+
```
231+
232+
```{r long-prep}
233+
gr_age <- c("Jeune", "Adulte","Senior")
234+
period <- c(1992, 1995, 1998)
235+
popu <- c(2185103, 6311109, 1525785,
236+
2196799, 6337067, 1596532,
237+
2180816, 6332857, 1678591)
238+
239+
demography <- tibble(
240+
groupe_age = rep(gr_age, times= 3),
241+
year = rep(period, each= 3),
242+
population = popu
243+
)
244+
```
245+
246+
Complétez la fonction ci-dessous.
247+
248+
```{r long_h2, exercise = TRUE, exercise.setup = "long-prep"}
249+
___ %>.%
250+
___(., names_from = ___, values_from = ___) -> ___
251+
head(___)
252+
```
253+
254+
```{r long_h2-hint-1}
255+
demography %>.%
256+
pivot_wider(., names_from = ___, values_from = ___) -> demo
257+
head(demo)
258+
#### Attention : solution dans le 'hint' suivant! ####
259+
```
260+
261+
```{r long_h2-solution}
262+
demography %>.%
263+
pivot_wider(., names_from = year, values_from = population) -> demo
264+
head(demo)
265+
```
266+
267+
```{r long_h2-check}
268+
grade_code("Bravo ! Vous venez de réaliser un tableau large en partant d'un tableau long. Comme vous pouvez le voir, la syntaxe est très similaire entre pivot_wider() et pivot_longer().")
269+
```
270+
271+
## Diviser des colonnes dans un tableau
272+
273+
La fonction est `separate()` est utile afin de séparer une colonne d'un tableau en plusieurs colonnes. La fonction `unite()` est la fonction complémentaire de `separate()`
274+
275+
```{r, eval=FALSE, echo=TRUE}
276+
DF %>.%
277+
separate(., col = VARNAME, into = c("VAR1", "VAR2"), sep = "[^[:alnum:]]+") -> DF2
278+
```
279+
280+
La fonction `separate()` utilise les arguments suivants :
281+
282+
- `col =` le nom de la variable à scinder
283+
- `into =` le nom des nouvelles variables
284+
- `sep =` le séparateur qui permet de scinder la variable sélectionnée en `col =`
285+
286+
```{r separate_init}
287+
bacteria <- tibble(
288+
measure = paste(rep(c("ind1", "ind2", "ind3"), each = 3),
289+
rep(c("2019-04-25", "2019-04-26", "2019-04-27"), times = 3),
290+
sep = "_"),
291+
value = c((11:13)^3, (11:13)^4, (11:13)^5)
292+
)
293+
294+
bact <- separate(bacteria, col = measure, into = c("rep", "date"), sep = "_" )
295+
```
296+
297+
Sur base du tableau ci-dessous :
298+
299+
```{r}
300+
knitr::kable(bacteria)
301+
```
302+
303+
Modifiez le tableau `bacteria` afin d'obtenir le tableau suivant que vous nommerez `bact`:
304+
305+
```{r}
306+
knitr::kable(bact)
307+
```
308+
309+
```{r separate_prep}
310+
bacteria <- tibble(
311+
measure = paste(rep(c("ind1", "ind2", "ind3"), each = 3),
312+
rep(c("2019-04-25", "2019-04-26", "2019-04-27"), times = 3),
313+
sep = "_"),
314+
value = c((11:13)^3, (11:13)^4, (11:13)^5)
315+
)
316+
```
317+
318+
```{r separate_h2, exercise = TRUE, exercise.setup = "separate_prep"}
319+
___ %>.%
320+
___(., col = ___, into = c("___", "___"), sep = "___") -> ___
321+
head(___)
322+
```
323+
324+
```{r separate_h2-hint-1}
325+
bacteria %>.%
326+
separate(., col = measure, into = c("___", "___"), sep = "___") -> bact
327+
head(bact)
328+
#### Attention : solution dans le 'hint' suivant! ####
329+
```
330+
331+
```{r separate_h2-solution}
332+
bacteria %>.%
333+
separate(., col = measure, into = c("rep", "date"), sep = "_" ) -> bact
334+
head(bact)
335+
```
336+
337+
```{r separate_h2-check}
338+
grade_code("Bravo ! Vous venez de scinder une colonne de votre tableau.")
339+
```
340+
341+
## Conclusion
342+
343+
Félicitation ! Vous venez de terminer votre séance d'exercices dans un tutoriel "learnr".
344+
345+
```{r comm_noscore, echo=FALSE}
346+
question_text(
347+
"Laissez-nous vos impressions sur ce learnr",
348+
answer("", TRUE, message = "Pas de commentaires... C'est bien aussi."),
349+
incorrect = "Vos commentaires sont enregistrés.",
350+
placeholder = "Entrez vos commentaires ici...",
351+
allow_retry = TRUE
352+
)
353+
```

0 commit comments

Comments
 (0)