Skip to content

Commit

Permalink
Learnrs module 6 ready
Browse files Browse the repository at this point in the history
  • Loading branch information
phgrosjean committed Nov 28, 2023
1 parent 568c5d8 commit c238ced
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 52 deletions.
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Package: BioDataScience1
Version: 2023.5.0
Version: 2023.6.0
Title: A Series of Learnr Documents for Biological Data Science 1
Description: Interactive documents using learnr and shiny applications for studying biological data science.
Authors@R: c(
Expand Down
16 changes: 10 additions & 6 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,30 @@
# BioDataScience1 2023.6.0

- Learnrs **A06La_recombination** and **A06Lb_multi-table** ready.

# BioDataScience1 2023.5.0

- Learnr A05La_wrangling ready.
- Learnr **A05La_wrangling** ready.

# BioDataScience1 2023.4.1

- Shiny application A04Ca_charts for ranking challenge results is added.
- Shiny application **A04Ca_charts** for ranking challenge results is added.

# BioDataScience1 2023.4.0

- Learnrs A04La_barplot, A04Lb_boxplot and A04Lc_comp_fig ready.
- Learnrs **A04La_barplot**, **A04Lb_boxplot** and **A04Lc_comp_fig** ready.

# BioDataScience1 2023.3.0

- Learnr A03La_univariate ready.
- Learnr **A03La_univariate** ready.

# BioDataScience1 2023.2.0

- Learnrs A02La_base, A02Lb_progression and A02Lc_scatterplot ready.
- Learnrs **A02La_base**, **A02Lb_progression** and **A02Lc_scatterplot* ready.

# BioDataScience1 2023.1.0

- Learnrs A00La_discovery, A01La_tools and A01Lb_git ready.
- Learnrs **A00La_discovery**, **A01La_tools** and **A01Lb_git* ready.

# BioDataScience1 2023.0.0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ runtime: shiny_prerendered

```{r setup, include=FALSE}
BioDataScience1::learnr_setup()
SciViews::R()
SciViews::R(lang = "fr")
```

```{r, echo=FALSE}
Expand All @@ -35,17 +35,17 @@ BioDataScience1::learnr_server(input, output, session)

## De large vers long

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()` en version tidy, ou `spivot_longer()` en version speedy. Avec la fonction tidy, pensez bien à utiliser `collect_dtx()` ou les assignations alternatives `%<-%` ou `%->%` ensuite.
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 `pivot_longer()` en version tidy, ou `spivot_longer()` en version speedy.

```{r, eval=FALSE, echo=TRUE}
DF1 %<-% pivot_longer(DF, cols = SELECTION, names_to = NEWVAR1, values_to = NEWVAR2)
DF1 <- spivot_longer(DF, cols = SELECTION, names_to = NEWVAR1, values_to = NEWVAR2)
```

La fonction `pivot_longer()` ou `spivot_longer()` a les arguments suivants :

- `cols =` les variables qui doivent être pivotées
- `names_to =` le nom de la nouvelle variable qui reprend le nom des colonnes pivotées.
- `values_to =` le nom de la nouvelle variable qui reprend les valeurs des colonnes pivotées
- `cols =` : les variables qui doivent être pivotées
- `names_to =` : le nom de la nouvelle variable qui reprend le nom des colonnes pivotées
- `values_to =` : le nom de la nouvelle variable qui reprend les valeurs des colonnes pivotées

```{r wide-init}
time <- 1989:1995
Expand All @@ -58,26 +58,26 @@ long <- dtx(
circumf = size
)
wide %<-% pivot_wider(long, names_from = year, values_from = circumf)
long1 %<-% pivot_longer(wide, cols = "1989":"1995", names_to = "year",
wide <- spivot_wider(long, names_from = year, values_from = circumf)
long1 <- spivot_longer(wide, cols = "1989":"1995", names_to = "year",
values_to = "circumf")
```

Sur base du tableau ci-dessous :
Sur base du tableau `wide` ci-dessous :

```{r}
knitr::kable(wide)
```

Modifiez le tableau `wide` afin d'obtenir le tableau suivant que vous nommerez `long` :
Modifiez ce tableau `wide` afin d'obtenir le tableau suivant que vous nommerez `long` :

```{r,}
knitr::kable(long1)
```

### Première variante de l'argument cols

Complétez le code afin d'obtenir le tableau `long` avec une fonction tidy.
Complétez le code pour obtenir le tableau `long` avec une fonction tidy.

```{r wide-prep}
time <- 1989:1995
Expand All @@ -90,23 +90,23 @@ long <- dtx(
circumf = size
)
wide %<-% pivot_wider(long, names_from = year, values_from = circumf)
wide <- spivot_wider(long, names_from = year, values_from = circumf)
```

```{r wide1_h3, exercise = TRUE, exercise.setup = "wide-prep"}
___ %<-% ___(___, cols = "___":"___", names_to = "___",
___ <- ___(___, cols = "___":"___", names_to = "___",
values_to = "___")
head(___)
```

```{r wide1_h3-hint-1}
long %<-% pivot_longer(wide, cols = "___":"___", names_to = "___",
long <- pivot_longer(wide, cols = "___":"___", names_to = "___",
values_to = "___")
head(long)
```

```{r wide1_h3-hint-2}
long %<-% pivot_longer(wide, cols = "1989":"1995", names_to = "___",
long <- pivot_longer(wide, cols = "1989":"1995", names_to = "___",
values_to = "___")
head(long)
Expand All @@ -115,7 +115,7 @@ head(long)

```{r wide1_h3-solution}
## Solution ##
long %<-% pivot_longer(wide, cols = "1989":"1995", names_to = "year",
long <- pivot_longer(wide, cols = "1989":"1995", names_to = "year",
values_to = "circumf")
head(long)
```
Expand Down Expand Up @@ -158,13 +158,13 @@ grade_code("Cette variante est parfois plus pratique, surtout avec des grands ta
Pour l'argument `cols =` vous pouvez aussi utiliser `start_with()` afin de sélectionner les colonnes dont le nom commence par une chaîne de caractères donnée pour le pivot. Créez à nouveau un tableau nommé `long` à partir du tableau `wide`. Utilisez à nouveau la fonction tidy ici.

```{r wide3_h2, exercise = TRUE, exercise.setup = "wide-prep"}
___ %<-% ___(., cols = ___("___"), names_to = "___",
___ <- ___(., cols = ___("___"), names_to = "___",
values_to = "___")
head(___)
```

```{r wide3_h2-hint-1}
long %<-% pivot_longer(wide, cols = starts_with("___"), names_to = "year",
long <- pivot_longer(wide, cols = starts_with("___"), names_to = "year",
values_to = "circumf")
head(long)
Expand All @@ -173,7 +173,7 @@ head(long)

```{r wide3_h2-solution}
## Solution ##
long %<-% pivot_longer(wide, cols = starts_with("19"), names_to = "year",
long <- pivot_longer(wide, cols = starts_with("19"), names_to = "year",
values_to = "circumf")
head(long)
```
Expand All @@ -187,13 +187,13 @@ grade_code("La sélection de variables à l'aide de `starts_with()` ou `ends_wit
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 pour l'inclure dans un rapport ou dans une présentation. La fonction utile pour cette transformation est `pivot_wider()` (version tidy) ou `spivot_wider()`(version speedy).

```{r, eval=FALSE, echo=TRUE}
DF1 %<-% pivot_wider(DF, names_from = VAR1, values_from = VAR2)
DF1 <- spivot_wider(DF, names_from = VAR1, values_from = VAR2)
```

La fonction `pivot_wider()` ou `spivot_wider()` requiert pour argument :
La fonction `pivot_wider()` ou `spivot_wider()` requiert pour arguments :

- `names_from =` le nom de la variable dont les valeurs vont être employées comme les noms des nouvelles variables.
- `values_from =` le nom de la variable dont les valeurs vont être employées comme les valeurs des nouvelles variables.
- `names_from =` : le nom de la variable dont les valeurs vont être employées comme les noms des nouvelles variables.
- `values_from =` : le nom de la variable dont les valeurs vont être employées comme les valeurs des nouvelles variables.

```{r long-init}
gr_age <- c("Jeune", "Adulte","Senior")
Expand All @@ -208,7 +208,7 @@ demography <- dtx(
population = popu
)
demo %<-% pivot_wider(demography, names_from = year, values_from = population)
demo <- spivot_wider(demography, names_from = year, values_from = population)
```

Sur base du tableau ci-dessous :
Expand Down Expand Up @@ -240,20 +240,20 @@ demography <- dtx(
Complétez l'instruction ci-dessous en utilisant une fonction tidy.

```{r long_h2, exercise=TRUE, exercise.setup="long-prep"}
___ %<-% ___(___, names_from = ___, values_from = ___)
___ <- ___(___, names_from = ___, values_from = ___)
head(___)
```

```{r long_h2-hint-1}
demo %<-% pivot_wider(demography, names_from = ___, values_from = ___)
demo <- pivot_wider(demography, names_from = ___, values_from = ___)
head(demo)
#### Attention : solution dans le 'hint' suivant! ####
```

```{r long_h2-solution}
## Solution ##
demo %<-% pivot_wider(demography, names_from = year, values_from = population)
demo <- pivot_wider(demography, names_from = year, values_from = population)
head(demo)
```

Expand All @@ -263,7 +263,7 @@ grade_code("Vous venez de réaliser un tableau large en partant d'un tableau lon

## Diviser des colonnes dans un tableau

La fonction à utiliser pour créer plusieurs variables en séparant les éléments qui se trouvent dans une seule colonne est `separate()` en tidy ou `sseparate()` en speedy. La fonction `unite()` ou `sunite()` est complémentaire de `separate()`/`sseparate()` et crée une variable à partir de plusieurs.
La fonction à utiliser pour créer plusieurs variables en séparant les éléments qui se trouvent dans une seule colonne est `separate()` en tidy ou `sseparate()` en speedy. La fonction `unite()` ou `sunite()` est complémentaire de `separate()`/`sseparate()` et crée une seule variable à partir de plusieurs.

```{r, eval=FALSE, echo=TRUE}
DF1 <- sseparate(DF, col = VARNAME, into = c("VAR1", "VAR2"),
Expand All @@ -272,11 +272,9 @@ DF1 <- sseparate(DF, col = VARNAME, into = c("VAR1", "VAR2"),

La fonction `separate()` ou `sseparate()` prend les arguments suivants :

- `col =` le nom de la variable à scinder
- `into =` le nom des nouvelles variables
- `sep =` le séparateur qui permet de scinder la variable sélectionnée en `col =`

Ici, nous utilisons la fonction speedy `sseparate()`. Si vous voulez utiliser la fonction tidy, vous devez d'abord convertir votre tableau en **data.frame** à l'aide de `as_dtf()` parce que la fonction `separate()` est boguée sur des **data.table**s.
- `col =` : le nom de la variable à scinder
- `into =` : le nom des nouvelles variables
- `sep =` : le séparateur qui permet de scinder la variable sélectionnée en `col =`

```{r separate_init}
bacteria <- dtx(
Expand All @@ -296,7 +294,7 @@ Sur base du tableau ci-dessous :
knitr::kable(bacteria)
```

Modifiez le tableau `bacteria` afin d'obtenir le tableau suivant que vous nommerez `bact` en utilisant une fonction speedy :
Modifiez le tableau `bacteria` pour obtenir le tableau suivant que vous nommerez `bact` en utilisant une fonction speedy :

```{r}
knitr::kable(bact)
Expand Down Expand Up @@ -334,12 +332,12 @@ head(bact)
```

```{r separate_h2-check}
grade_code("Vous venez de scinder une colonne de votre tableau avec `sseparate()`. Si vous utilisez `separate()` en version tidy sur le tableau tab, pensez bien à faire `separate(as_dtf(tab), ...)` pour contourner le bug.")
grade_code("Vous venez de scinder une colonne de votre tableau avec `sseparate()`. Vous pouvez également utiliser `separate()` en tidy.")
```

## Conclusion

Félicitation ! Vous êtes maintenant capables de convertir des tableaux de long en large et inversement et de scinder des variables.
Félicitation ! Vous êtes maintenant capables de convertir des tableaux de long en large et inversement et de scinder des variables.

```{r comm_noscore, echo=FALSE}
question_text(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ BioDataScience1::learnr_server(input, output, session)

## Combinaison de deux tableaux

Il y a plusieurs fonction qui permettent de fusionner des tableaux. Nous vous proposons d'employer `*_join()` comme `full_join()`/`sfull_join()`, `inner_join()`/`sinner_join()`, `left_join()`/`sleft_join()`, `right_join()`/`sright_join()`. Attention ! Les fonctions tidy non préfixées d'un "s" nécessitent des précautions pour **collecter** les résultats à la fin (utilisation de `collect_dtx()` ou les assignations alternatives `%<-%` ou `%->%`).
Il existe plusieurs fonctions qui permettent de fusionner des tableaux. Nous vous proposons d'employer `*_join()` comme `full_join()`/`sfull_join()`, `inner_join()`/`sinner_join()`, `left_join()`/`sleft_join()`, `right_join()`/`sright_join()`.

```{r, eval=FALSE, echo=TRUE}
DF <- (s)full_join(DF1, DF2, by = VAR)
Expand All @@ -43,9 +43,9 @@ DF <- (s)right_join(DF1, DF2, by = VAR)
Ces quatre paires de fonctions utilisent la syntaxe suivante :

- les deux premiers arguments de la fonction sont les tableaux de données 1 et 2 qui doivent être fusionnés.
- `by =` le nom de la ou des variables qui permettent de lier les deux tableaux.
- `by =` : le nom de la ou des variables qui permettent de lier les deux tableaux.

Soyez particulièrement attentif lors des exercices ci-dessous, les fonctions utilisées semble similaire mais les différences peuvent grandement changer les résultats de la fusion de tableaux.
Soyez particulièrement attentif lors des exercices ci-dessous, les fonctions utilisées semblent similaires mais les différences peuvent grandement changer les résultats de la fusion de tableaux.

Des chercheurs réalisent une expérience avec plusieurs aquariums expérimentaux. Ils ont encodé les données dans deux tableaux distincts. Le premier tableau contient la variation de la température et de la salinité dans ces aquariums. Le second tableau reprend à la masse de l'organisme placé dans l'aquarium.

Expand Down Expand Up @@ -97,13 +97,13 @@ weight <- dtx(
weight = rnorm(n = 5L, mean = 1.5, sd = 0.5))
```

```{r join1_h2, exercise = TRUE, exercise.setup = "join_prep"}
```{r join1_h2, exercise=TRUE, exercise.setup="join_prep"}
___ <- ___(___, ___, by = "___")
knitr::kable(___)
```

```{r join1_h2-hint-1}
___ %<-% ___(physico, weight, by = "aqua")
___ <- ___(physico, weight, by = "aqua")
knitr::kable(___)
#### Attention : solution dans le 'hint' suivant! ####
Expand All @@ -128,21 +128,21 @@ sleft_join(physico, weight, by = "aqua") %>.%
knitr::kable(.)
```

```{r join2_h2, exercise = TRUE, exercise.setup = "join_prep"}
___ %<-% ___(___, ___, by = "___")
```{r join2_h2, exercise=TRUE, exercise.setup="join_prep"}
___ <- ___(___, ___, by = "___")
knitr::kable(___)
```

```{r join2_h2-hint-1}
___ %<-% ___(physico, weight, by = "aqua")
___ <- ___(physico, weight, by = "aqua")
knitr::kable(___)
#### Attention : solution dans le 'hint' suivant! ####
```

```{r join2_h2-solution}
## Solution ##
ph_weight %<-% left_join(physico, weight, by = "aqua")
ph_weight <- left_join(physico, weight, by = "aqua")
knitr::kable(ph_weight)
```

Expand Down

0 comments on commit c238ced

Please sign in to comment.