Retour à la page d’accueil

Dans cette partie du cours vous allez apprendre à réorganiser des tables dans R. Cela peur être utile si vous ne devez travailler que sur une partie des données.

Aujourd’hui nous allons voir:

  1. Comment filtrer des lignes ou des colonnes dans un tableau

  2. Exporter le nouveau tableau créé dans R


Mise en place

Tout d’abord, créez un nouveau script R et préparez votre environnement de travail:

# Chargez la librairie `tidyverse` (aide: utilisez la fonction `library()`)

# Changez votre répertoire de travail pour être dans `session3_plots_reorganisation`
#(aide: utilisez la fonction `setwd()`)

# Importer `burghardt_et_al_2015_expt1.txt` et mettez le dans un objet appelé `expt1`
#(aide: utilisez la fonction `read_tsv()`)

Sélectionner des colonnes avec la fonction select()

Tout d’abord, utilisons les fonctions dim() et names() afin de connaitre les dimensions du tableau et le nom des colonnes.

dim(expt1)
## [1] 957  15
names(expt1)
##  [1] "plant_nb"             "genotype"             "background"          
##  [4] "temperature"          "fluctuation"          "day.length"          
##  [7] "vernalization"        "bolt.survival"        "bolt"                
## [10] "days.to.bolt"         "days.to.flower"       "rosette.leaf.num"    
## [13] "cauline.leaf.num"     "blade.length.mm"      "total.leaf.length.mm"

Il y a beaucoup de colonnes dans ce tableau. Afin de ne garder que les colonnes genotype et temperature, nous pouvons utiliser la fonction select()

select(expt1, genotype, temperature)
## # A tibble: 957 × 2
##    genotype temperature
##    <chr>          <dbl>
##  1 Col Ama           12
##  2 Col Ama           12
##  3 Col Ama           12
##  4 Col Ama           12
##  5 Col Ama           12
##  6 Col Ama           12
##  7 Col Ama           12
##  8 Col Ama           12
##  9 Col Ama           12
## 10 Col Ama           12
## # … with 947 more rows

Il est aussi possible de ne garder que les colonnes qui contiennent le mot “bolt” dans leur nom:

select(expt1, contains("bolt"))
## # A tibble: 957 × 3
##    bolt.survival bolt  days.to.bolt
##    <chr>         <chr>        <dbl>
##  1 Y             Y               28
##  2 Y             Y               29
##  3 Y             Y               31
##  4 Y             Y               31
##  5 Y             Y               32
##  6 Y             Y               33
##  7 Y             Y               34
##  8 Y             Y               35
##  9 Y             Y               69
## 10 Y             Y               72
## # … with 947 more rows


Exercice 1 : Sélectionnez les colonnes qui contiennent des données mesurées en mm

BONUS:
1. Sélectionnez les colonnes dont le titre finit par “bolt”
2. Sélectionnez les colonnes qui ne sont pas plant_nb et genotype
Aide: Regardez les exemples dans l’aide de R ou cherchez dans google


Sélectionner des lignes à partir de critères avec la fonction filter()

Avec la fonction filter(), nous pouvons garder toutes les lignes de notre table qui correspondent à des plantes qui ont subies une vernalisation.

Tout d’abord, nous devons connaitre les différentes valeurs de la colonne vernalization. Comme nous pouvons voir, il y a deux options: ‘NV’ et ‘V’.

distinct(expt1, vernalization)
## # A tibble: 2 × 1
##   vernalization
##   <chr>        
## 1 NV           
## 2 V

Comme nous voulons garder les plantes qui ont subies une vernalisation, nous devons filtrer les données pour garder les lignes pour lesquelles il y a “V” dans la colonne vernalization:

filter(expt1, vernalization == "V")
## # A tibble: 330 × 15
##    plant…¹ genot…² backg…³ tempe…⁴ fluct…⁵ day.l…⁶ verna…⁷ bolt.…⁸ bolt  days.…⁹
##      <dbl> <chr>   <chr>     <dbl> <chr>     <dbl> <chr>   <chr>   <chr>   <dbl>
##  1       1 Col Ama Col          12 Con          16 V       Y       Y          24
##  2       2 Col Ama Col          12 Con          16 V       Y       Y          25
##  3       3 Col Ama Col          12 Con          16 V       Y       Y          25
##  4       4 Col Ama Col          12 Con          16 V       Y       Y          26
##  5       5 Col Ama Col          12 Con          16 V       Y       Y          26
##  6       6 Col Ama Col          12 Con          16 V       Y       Y          27
##  7       7 Col Ama Col          12 Con          16 V       Y       Y          28
##  8       8 Col Ama Col          12 Con          16 V       Y       Y          29
##  9       1 Col Ama Col          12 Con           8 V       Y       Y          56
## 10       2 Col Ama Col          12 Con           8 V       Y       Y          59
## # … with 320 more rows, 5 more variables: days.to.flower <dbl>,
## #   rosette.leaf.num <dbl>, cauline.leaf.num <dbl>, blade.length.mm <dbl>,
## #   total.leaf.length.mm <dbl>, and abbreviated variable names ¹​plant_nb,
## #   ²​genotype, ³​background, ⁴​temperature, ⁵​fluctuation, ⁶​day.length,
## #   ⁷​vernalization, ⁸​bolt.survival, ⁹​days.to.bolt

Nous pouvons utiliser les opérateurs suivant pour définir les conditions pour filtrer les données:

Opérateur Condition de sélection Exemple
< inférieur à filter(expt1, days.to.bolt < 20)
<= inférieur ou égal à filter(expt1, days.to.bolt <= 20)
> supérieur à filter(expt1, days.to.bolt > 20)
>= supérieur ou égal à filter(expt1, days.to.bolt >= 20)
== égal à filter(expt1, days.to.bolt == 20)
!= différent de filter(expt1, days.to.bolt != 20)
%in% est contenu dans filter(expt1, genotype %in% c("Col FRI", "Ler-1"))

Il est aussi possible de combiner plusieurs conditions de sélection avec les opérateurs suivant:

Opérateur Signification Exemple
& ET filter(expt1, days.to.bolt == 20 & genotype == "Ler-1")
| OU filter(expt1, rosette.leaf.num < 8 | rosette.leaf.num > 100)

Nous pouvons aussi identifier les données manquantes (NA) avec la fonction is.na() ou sa négation (en utilisant !):

Opérateur Signification Exemple
is.na() données manquante filter(expt1, is.na(rosette.leaf.num))
!is.na() donnée non manquante filter(expt1, !is.na(rosette.leaf.num))

source de l’image

Par exemple, nous pouvons sélectionner les plantes qui ont été vernalisées ET qui ont poussées avec une température fluctuante:

filter(expt1, vernalization == "V" & fluctuation == "Var")

Il est aussi possible de sélectionner les plantes qui ont poussées avec 8h de jours OU qui fleurissent tardivement:

filter(expt1, day.length == "8" | days.to.bolt > 85)


Exercice 2: Filtrez les données pour garder les plantes selon les 3 cas de figures suivant (indépendants les uns des autres):

  1. Plantes qui ne sont pas du background Ler et qui ont été traitées avec une température fluctuante.
  2. Plantes qui ont fleuries (bolt) en moins de 57 jours et qui ont moins de 40 feuilles de rosette
  3. Plantes du génotype fca-6 pour qui le blade.length.mm n’est pas manquant

BONUS:
Filtrez les données pour garder les lignes pour lesquelles le background contient Col
Sauvez le résultat dans un nouvel objet et vérifier quelles valeurs distinctes sont dans la colonne background en utilisant le fonction distinct()
Aide: Faites un recherche sur google pour trouver le résultat


Exporter le nouveau tableau créé dans R

Aujourd’hui, nous avons fortement restructuré notre tableau. Nous pouvons le sauver pour le réutiliser ultérieurement.

Pour cela nous utilisons la fonction write_tsv()

Par exemple, imaginons que nous voulons enlever des données manquantes et partager les données avec un collaborateurs (ou les réutiliser nous même plus tard):

expt1.days.to.flower.clean <- expt1 %>% 
  filter(!is.na(days.to.flower))

write_tsv(expt1.days.to.flower.clean, file = "../data/expt1_days_to_flower_clean.txt")


Contrôle continu à faire pour la prochaine séance

A partir ce ce que nous avons vu aujourd’hui:

- Finissez la première moitié du contrôle continu dont les instructions sont ici

- Déposez avant le 16/11/2022 à minuit sur Moodle le script R de la première moitié du contrôle continu résultant des instructions à la fin des séances 1, 2 et 3.


Retour à la page d’accueil