Retour à la page d’accueil




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

select(expt1, contains("mm"))
## # A tibble: 957 × 2
##    blade.length.mm total.leaf.length.mm
##              <dbl>                <dbl>
##  1            12.9                 21.1
##  2            10.5                 19.1
##  3            13.2                 23.4
##  4            14.6                 27.2
##  5            13.3                 20.4
##  6            14.7                 25.3
##  7            13                   23.2
##  8            17.8                 31.3
##  9            20.7                 33.1
## 10            19.4                 33.2
## # ℹ 947 more rows


BONUS:
1. Sélectionnez les colonnes dont le titre finit par “bolt”

Aide: Regardez les exemples dans l’aide de R ou cherchez dans google

# En tapant "R tidyverse select column that ends with a specific text" dans google, le 1er site (https://dplyr.tidyverse.org/reference/select.html) indique d'utiliser "ends_with" dans la fonction select

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


> 2. Sélectionnez les colonnes qui ne sont pas plant_nb et genotype

select(expt1, -plant_nb, -genotype)
## # A tibble: 957 × 13
##    background temperature fluctuation day.length vernalization bolt.survival
##    <chr>            <dbl> <chr>            <dbl> <chr>         <chr>        
##  1 Col                 12 Con                 16 NV            Y            
##  2 Col                 12 Con                 16 NV            Y            
##  3 Col                 12 Con                 16 NV            Y            
##  4 Col                 12 Con                 16 NV            Y            
##  5 Col                 12 Con                 16 NV            Y            
##  6 Col                 12 Con                 16 NV            Y            
##  7 Col                 12 Con                 16 NV            Y            
##  8 Col                 12 Con                 16 NV            Y            
##  9 Col                 12 Con                  8 NV            Y            
## 10 Col                 12 Con                  8 NV            Y            
## # ℹ 947 more rows
## # ℹ 7 more variables: bolt <chr>, days.to.bolt <dbl>, days.to.flower <dbl>,
## #   rosette.leaf.num <dbl>, cauline.leaf.num <dbl>, blade.length.mm <dbl>,
## #   total.leaf.length.mm <dbl>



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.ratio n’est pas manquant
# 1. Filtrez les plantes qui ne sont pas du background Ler et qui ont été traitées avec une température fluctuante.

filter(expt1, background!="Ler" & fluctuation=="Var")
## # A tibble: 389 × 15
##    plant_nb genotype background temperature fluctuation day.length vernalization
##       <dbl> <chr>    <chr>            <dbl> <chr>            <dbl> <chr>        
##  1        1 Col Ama  Col                 12 Var                 16 NV           
##  2        2 Col Ama  Col                 12 Var                 16 NV           
##  3        3 Col Ama  Col                 12 Var                 16 NV           
##  4        4 Col Ama  Col                 12 Var                 16 NV           
##  5        5 Col Ama  Col                 12 Var                 16 NV           
##  6        6 Col Ama  Col                 12 Var                 16 NV           
##  7        7 Col Ama  Col                 12 Var                 16 NV           
##  8        8 Col Ama  Col                 12 Var                 16 NV           
##  9        1 Col Ama  Col                 12 Var                  8 NV           
## 10        2 Col Ama  Col                 12 Var                  8 NV           
## # ℹ 379 more rows
## # ℹ 8 more variables: bolt.survival <chr>, bolt <chr>, days.to.bolt <dbl>,
## #   days.to.flower <dbl>, rosette.leaf.num <dbl>, cauline.leaf.num <dbl>,
## #   blade.length.mm <dbl>, total.leaf.length.mm <dbl>
# 2. Filtrez les plantes qui ont fleuries (bolt) en moins de  57 jours et qui ont moins de 40 feuilles.

filter(expt1, days.to.bolt<57  & rosette.leaf.num<40)
## # A tibble: 389 × 15
##    plant_nb genotype background temperature fluctuation day.length vernalization
##       <dbl> <chr>    <chr>            <dbl> <chr>            <dbl> <chr>        
##  1        1 Col Ama  Col                 12 Con                 16 NV           
##  2        2 Col Ama  Col                 12 Con                 16 NV           
##  3        3 Col Ama  Col                 12 Con                 16 NV           
##  4        4 Col Ama  Col                 12 Con                 16 NV           
##  5        5 Col Ama  Col                 12 Con                 16 NV           
##  6        6 Col Ama  Col                 12 Con                 16 NV           
##  7        7 Col Ama  Col                 12 Con                 16 NV           
##  8        8 Col Ama  Col                 12 Con                 16 NV           
##  9        1 Col Ama  Col                 12 Var                 16 NV           
## 10        2 Col Ama  Col                 12 Var                 16 NV           
## # ℹ 379 more rows
## # ℹ 8 more variables: bolt.survival <chr>, bolt <chr>, days.to.bolt <dbl>,
## #   days.to.flower <dbl>, rosette.leaf.num <dbl>, cauline.leaf.num <dbl>,
## #   blade.length.mm <dbl>, total.leaf.length.mm <dbl>
# 3. Filtrez les plantes du génotype fca-6 pour qui le blade.length.mm n'est pas manquant

filter(expt1, genotype=="fca-6"  & !is.na(blade.length.mm))
## # A tibble: 44 × 15
##    plant_nb genotype background temperature fluctuation day.length vernalization
##       <dbl> <chr>    <chr>            <dbl> <chr>            <dbl> <chr>        
##  1        1 fca-6    Ler                 12 Con                 16 NV           
##  2        2 fca-6    Ler                 12 Con                 16 NV           
##  3        3 fca-6    Ler                 12 Con                 16 NV           
##  4        4 fca-6    Ler                 12 Con                 16 NV           
##  5        5 fca-6    Ler                 12 Con                 16 NV           
##  6        6 fca-6    Ler                 12 Con                 16 NV           
##  7        7 fca-6    Ler                 12 Con                 16 NV           
##  8        8 fca-6    Ler                 12 Con                 16 NV           
##  9        1 fca-6    Ler                 12 Con                  8 NV           
## 10        2 fca-6    Ler                 12 Con                  8 NV           
## # ℹ 34 more rows
## # ℹ 8 more variables: bolt.survival <chr>, bolt <chr>, days.to.bolt <dbl>,
## #   days.to.flower <dbl>, rosette.leaf.num <dbl>, cauline.leaf.num <dbl>,
## #   blade.length.mm <dbl>, total.leaf.length.mm <dbl>


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

# Il existe plusieurs solutions. En tapant "R tidyverse filter lines containing text" dans google 

# Le 2eme site (https://www.statology.org/filter-rows-that-contain-string-dplyr/) propose de faire 

expt1_col_background <- filter(expt1, grepl("Col", background))
distinct(expt1_col_background,background)
## # A tibble: 2 × 1
##   background
##   <chr>     
## 1 Col       
## 2 Col FRI
# Le 4eme site (https://sebastiansauer.github.io/dplyr_filter/) propose de faire

expt1_col_background2 <- filter(expt1, str_detect(background, "Col"))
distinct(expt1_col_background2,background)
## # A tibble: 2 × 1
##   background
##   <chr>     
## 1 Col       
## 2 Col FRI



Exercice 3: Utilisez %>% pour faire la suite de sélections suivantes surexpt1:

filter(expt1,  background!="Ler" & fluctuation=="Var") %>% 
  select(genotype, blade.length.mm, contains("bolt"))
## # A tibble: 389 × 5
##    genotype blade.length.mm bolt.survival bolt  days.to.bolt
##    <chr>              <dbl> <chr>         <chr>        <dbl>
##  1 Col Ama             15.1 Y             Y               32
##  2 Col Ama             16   Y             Y               32
##  3 Col Ama             17.5 Y             Y               32
##  4 Col Ama             15.1 Y             Y               33
##  5 Col Ama             15   Y             Y               33
##  6 Col Ama             15.1 Y             Y               33
##  7 Col Ama             13.7 Y             Y               33
##  8 Col Ama             17.7 Y             Y               33
##  9 Col Ama             29.7 Y             Y               68
## 10 Col Ama             22.1 Y             Y               68
## # ℹ 379 more rows


BONUS: Transformez l’enchainement de commandes afin d’utiliser des pipes %>% plutôt que objets intermédiaires

expt1 <- read_tsv("../data/burghardt_et_al_2015_expt1.txt")

expt1_filtered <- filter(expt1, fluctuation=="Con" & day.length=="16")

expt1_selected <- select(expt1_filtered,days.to.bolt:total.leaf.length.mm)

summary(expt1_selected)
##   days.to.bolt    days.to.flower  rosette.leaf.num cauline.leaf.num
##  Min.   : 15.00   Min.   : 21.0   Min.   : 6.00    Min.   : 1.000  
##  1st Qu.: 26.75   1st Qu.: 39.0   1st Qu.:14.00    1st Qu.: 4.000  
##  Median : 41.50   Median : 49.0   Median :30.00    Median : 7.000  
##  Mean   : 45.00   Mean   : 53.6   Mean   :31.67    Mean   : 6.827  
##  3rd Qu.: 57.00   3rd Qu.: 70.0   3rd Qu.:46.00    3rd Qu.: 9.000  
##  Max.   :152.00   Max.   :135.0   Max.   :91.00    Max.   :13.000  
##                   NA's   :7       NA's   :9        NA's   :9       
##  blade.length.mm total.leaf.length.mm
##  Min.   : 8.20   Min.   :10.90       
##  1st Qu.:14.45   1st Qu.:22.12       
##  Median :19.20   Median :30.50       
##  Mean   :18.39   Mean   :29.01       
##  3rd Qu.:21.57   3rd Qu.:34.52       
##  Max.   :28.20   Max.   :47.00       
##  NA's   :78      NA's   :62


Solution:

read_tsv("../data/burghardt_et_al_2015_expt1.txt") %>% 
  filter(fluctuation=="Con" & day.length=="16") %>% 
  select(days.to.bolt:total.leaf.length.mm) %>% 
  summary()
##   days.to.bolt    days.to.flower  rosette.leaf.num cauline.leaf.num
##  Min.   : 15.00   Min.   : 21.0   Min.   : 6.00    Min.   : 1.000  
##  1st Qu.: 26.75   1st Qu.: 39.0   1st Qu.:14.00    1st Qu.: 4.000  
##  Median : 41.50   Median : 49.0   Median :30.00    Median : 7.000  
##  Mean   : 45.00   Mean   : 53.6   Mean   :31.67    Mean   : 6.827  
##  3rd Qu.: 57.00   3rd Qu.: 70.0   3rd Qu.:46.00    3rd Qu.: 9.000  
##  Max.   :152.00   Max.   :135.0   Max.   :91.00    Max.   :13.000  
##                   NA's   :7       NA's   :9        NA's   :9       
##  blade.length.mm total.leaf.length.mm
##  Min.   : 8.20   Min.   :10.90       
##  1st Qu.:14.45   1st Qu.:22.12       
##  Median :19.20   Median :30.50       
##  Mean   :18.39   Mean   :29.01       
##  3rd Qu.:21.57   3rd Qu.:34.52       
##  Max.   :28.20   Max.   :47.00       
##  NA's   :78      NA's   :62



Exercice 4: Faite un violon plot du temps de floraison pour les différents génotypes, mais uniquement pour les plantes ayant poussées en jours court (8h de lumière).

Aide: Utilisez filter() pour sélectionner les données et ensuite un pipe (%>%) pour utiliser l’output pour le graphique.

filter(expt1,  day.length==8) %>% 
  ggplot((aes( x=genotype, y=days.to.flower))) +
  geom_violin() +
  ggtitle("plantes ayant poussées en jours court (8h de lumière)")
## Warning: Removed 74 rows containing non-finite outside the scale range
## (`stat_ydensity()`).

BONUS

Représentez, uniquement pour les plantes qui contiennent le mot “Col” dans le background, et qui ont poussée à 22°C, un box plot de days.to.bolt en fonction de vernalization, coloré en fonction de la fluctuation. Séparez les graphiques pour avoir une facet par génotype. Utilisez un thème de type theme_bw.

Interprétez le résultat: Est-ce que le temps de floraison de certains génotypes est affecté par la fluctuation de température. Si oui lesquels?

filter(expt1, grepl("Col", background) & temperature == 22) %>% 
  ggplot(aes(x=vernalization, y=days.to.bolt, color=fluctuation)) +
  geom_boxplot()+
  facet_grid(.~genotype) +
  theme_bw()

Interprétation du résultat: On peut voir un effet très marqué de la fluctuation de température pour certains génotypes, avec un temps de floraison plus précoce quand la température varie par rapport à quand elle ne varie pas. Cet effet est très marqué pour les génotypes Col FRI, prmt5 FRI et vin3-4 FRI.



Exercice 5:

Créez une nouvelle colonne “blade.ratio” avec le ratio de blade.length.mm et total.leaf.length.mm

mutate(expt1, blade.ratio=blade.length.mm/total.leaf.length.mm)
## # A tibble: 957 × 16
##    plant_nb genotype background temperature fluctuation day.length vernalization
##       <dbl> <chr>    <chr>            <dbl> <chr>            <dbl> <chr>        
##  1        1 Col Ama  Col                 12 Con                 16 NV           
##  2        2 Col Ama  Col                 12 Con                 16 NV           
##  3        3 Col Ama  Col                 12 Con                 16 NV           
##  4        4 Col Ama  Col                 12 Con                 16 NV           
##  5        5 Col Ama  Col                 12 Con                 16 NV           
##  6        6 Col Ama  Col                 12 Con                 16 NV           
##  7        7 Col Ama  Col                 12 Con                 16 NV           
##  8        8 Col Ama  Col                 12 Con                 16 NV           
##  9        1 Col Ama  Col                 12 Con                  8 NV           
## 10        2 Col Ama  Col                 12 Con                  8 NV           
## # ℹ 947 more rows
## # ℹ 9 more variables: bolt.survival <chr>, bolt <chr>, days.to.bolt <dbl>,
## #   days.to.flower <dbl>, rosette.leaf.num <dbl>, cauline.leaf.num <dbl>,
## #   blade.length.mm <dbl>, total.leaf.length.mm <dbl>, blade.ratio <dbl>

BONUS:
Créez une nouvelle colonne “late.flowering” qui contient TRUE si days.to.bolt est supérieur à 70, et FALSE days.to.bolt est inférieur à 70.
Aide: Trouvez la solution en utilisant google

# En tapant "mutate tidyverse create new column depending on value other column" dasn google, le 1er site (https://www.marsja.se/r-add-column-to-dataframe-based-on-other-columns-conditions-dplyr/) propose plusieurs solutions pour créer une colonne en fonction des valeurs d'une autre colonne. Voici l'une d'elles qui utilise la fonction mutate():

mutate(expt1, late.flowering=if_else(condition = days.to.bolt>70, TRUE, FALSE))
## # A tibble: 957 × 16
##    plant_nb genotype background temperature fluctuation day.length vernalization
##       <dbl> <chr>    <chr>            <dbl> <chr>            <dbl> <chr>        
##  1        1 Col Ama  Col                 12 Con                 16 NV           
##  2        2 Col Ama  Col                 12 Con                 16 NV           
##  3        3 Col Ama  Col                 12 Con                 16 NV           
##  4        4 Col Ama  Col                 12 Con                 16 NV           
##  5        5 Col Ama  Col                 12 Con                 16 NV           
##  6        6 Col Ama  Col                 12 Con                 16 NV           
##  7        7 Col Ama  Col                 12 Con                 16 NV           
##  8        8 Col Ama  Col                 12 Con                 16 NV           
##  9        1 Col Ama  Col                 12 Con                  8 NV           
## 10        2 Col Ama  Col                 12 Con                  8 NV           
## # ℹ 947 more rows
## # ℹ 9 more variables: bolt.survival <chr>, bolt <chr>, days.to.bolt <dbl>,
## #   days.to.flower <dbl>, rosette.leaf.num <dbl>, cauline.leaf.num <dbl>,
## #   blade.length.mm <dbl>, total.leaf.length.mm <dbl>, late.flowering <lgl>