Timestamp: Wed Dec 2 00:52:39 2020
Drafted: Francesco Maria Sabatini
Revised: Helge Bruelheide
Version: 1.1

This report documents the construction of the DT table for sPlot 3.0. It is based on dataset sPlot_3.0.2, received on 24/07/2019 from Stephan Hennekens.

Caution: Layer information is not available for all species in each plot. In case of missing information Layer is set to zero.

Changes in version 1.1
1) Added explanation of fields
2) Fixed taxon_group of Friesodielsia
3) Only export the fields Ab_scale and Abundance

knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
library(readr)
library(xlsx)
library(knitr)
library(kableExtra)

#save temporary files
write("TMPDIR = /data/sPlot/users/Francesco/_tmp", file=file.path(Sys.getenv('TMPDIR'), '.Renviron'))
write("R_USER = /data/sPlot/users/Francesco/_tmp", file=file.path(Sys.getenv('R_USER'), '.Renviron'))
#rasterOptions(tmpdir="/data/sPlot/users/Francesco/_tmp")

Search and replace unclosed quotation marks and escape them. Run in Linux terminal

# escape all double quotation marks. Run in Linux terminal
# sed 's/"/\\"/g' sPlot_3_0_2_species.csv > sPlot_3_0_2_species_test.csv

Import data Table

DT table is the species x plot matrix, in long format.

DT0 <- readr::read_delim("../sPlot_data_export/sPlot_3_0_2_species_test.csv", 
                            delim="\t", 
                         col_type = cols(
                                PlotObservationID = col_double(),
                                Taxonomy = col_character(),
                                `Taxon group` = col_character(),
                                `Taxon group ID` = col_double(),
                                `Turboveg2 concept` = col_character(),
                                `Matched concept` = col_character(),
                                Match = col_double(),
                                Layer = col_double(),
                                `Cover %` = col_double(),
                                `Cover code` = col_character(),
                                x_ = col_double()
                              )
                         ) 
nplots <- length(unique(DT0$PlotObservationID))
nspecies <- length(unique(DT0$`Matched concept`))

Match plots with those in header

load("../_output/header_sPlot3.0.RData")
DT0 <- DT0 %>% 
  filter(PlotObservationID %in% unique(header$PlotObservationID))

The DT table includes 43093474 species * plot records, across 1978589 plots. Before taxonomic resolution, there are 107676 species .

Example of initial DT table (3 randomly selected plots shown)
PlotObservationID Taxonomy Taxon group Taxon group ID Turboveg2 concept Matched concept Match Layer Cover % Cover code x_
705955 FR-France_sophy Vascular plant 1 Aconitum napellus Aconitum napellus 3 0 3 1 NA
705955 FR-France_sophy Vascular plant 1 Adenostyles alliariae Adenostyles alliariae 3 0 88 5 NA
705955 FR-France_sophy Vascular plant 1 Arabis alpina Arabis alpina 3 0 2
NA
705955 FR-France_sophy Vascular plant 1 Cirsium spinosissimum Cirsium spinosissimum 3 0 2
NA
705955 FR-France_sophy Vascular plant 1 Doronicum grandiflorum Doronicum grandiflorum 3 0 2
NA
705955 FR-France_sophy Vascular plant 1 Peucedanum ostruthium Peucedanum ostruthium 3 0 3 1 NA
705955 FR-France_sophy Vascular plant 1 Primula elatior Primula elatior 3 0 2
NA
705955 FR-France_sophy Vascular plant 1 Tozzia alpina Tozzia alpina 3 0 3 1 NA
968394 IR-Ireland2008 Vascular plant 1 Agrostis capillaris Agrostis capillaris 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Agrostis stolonifera Agrostis stolonifera 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Alopecurus pratensis Alopecurus pratensis 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Anthoxanthum odoratum Anthoxanthum odoratum 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Bellis perennis Bellis perennis 3 0 1 x NA
968394 IR-Ireland2008 Moss 3 Brachythecium albicans Brachythecium albicans 1 0 1 x NA
968394 IR-Ireland2008 Moss 3 Brachythecium rutabulum Brachythecium rutabulum 1 0 1 x NA
968394 IR-Ireland2008 Moss 3 Bryum pseudotriquetrum var. bimum Bryum pseudotriquetrum 1 0 1 x NA
968394 IR-Ireland2008 Moss 3 Calliergonella cuspidata Calliergonella cuspidata 1 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Callitriche stagnalis Callitriche stagnalis 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Caltha palustris Caltha palustris 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Cardamine pratensis Cardamine pratensis 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Carex disticha Carex disticha 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Carex leporina Carex leporina 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Carex paniculata Carex paniculata 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Cerastium fontanum Cerastium fontanum 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Cirsium palustre Cirsium palustre 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Crepis capillaris Crepis capillaris 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Cynosurus cristatus Cynosurus cristatus 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Deschampsia cespitosa Deschampsia cespitosa 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Epilobium obscurum Epilobium obscurum 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Epilobium parviflorum Epilobium parviflorum 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Equisetum fluviatile Equisetum fluviatile 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Equisetum sylvaticum Equisetum sylvaticum 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Festuca rubra Festuca rubra 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Filipendula ulmaria Filipendula ulmaria 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Galium palustre Galium palustre 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Glyceria declinata Glyceria declinata 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Glyceria fluitans Glyceria fluitans 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Gnaphalium uliginosum Gnaphalium uliginosum 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Holcus lanatus Holcus lanatus 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Hypochaeris radicata Hypochaeris radicata 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Isolepis setacea Isolepis setacea 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Juncus acutiflorus Juncus acutiflorus 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Juncus bufonius Juncus bufonius 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Juncus bulbosus Juncus bulbosus 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Juncus effusus Juncus effusus 3 0 1 x NA
968394 IR-Ireland2008 Moss 3 Kindbergia praelonga Kindbergia praelonga 1 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Lathyrus pratensis Lathyrus pratensis 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Leontodon autumnalis Scorzoneroides autumnalis 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Lolium perenne Lolium perenne 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Lotus pedunculatus Lotus pedunculatus 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Lychnis flos-cuculi Silene flos-cuculi 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Lythrum portula Lythrum portula 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Lythrum salicaria Lythrum salicaria 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Mentha aquatica Mentha aquatica 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Persicaria maculosa Persicaria maculosa 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Plantago lanceolata Plantago lanceolata 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Poa annua Ochlopoa annua 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Poa pratensis Poa pratensis 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Potentilla palustris Comarum palustre 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Prunella vulgaris Prunella vulgaris 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Ranunculus acris Ranunculus acris 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Ranunculus flammula Ranunculus flammula 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Ranunculus repens Ranunculus repens 3 0 1 x NA
968394 IR-Ireland2008 Moss 3 Rhytidiadelphus squarrosus Rhytidiadelphus squarrosus 1 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Rubus fruticosus aggr. Rubus fruticosus aggr. 1 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Rumex acetosa Rumex acetosa 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Rumex obtusifolius Rumex obtusifolius 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Sagina procumbens Sagina procumbens 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Salix x multinervis Salix x multinervis 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Senecio aquaticus Jacobaea aquatica 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Senecio jacobaea Jacobaea vulgaris 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Sonchus asper Sonchus asper 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Stellaria uliginosa Stellaria alsine 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Taraxacum officinale aggr. Taraxacum sect. Taraxacum 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Trifolium pratense Trifolium pratense 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Trifolium repens Trifolium repens 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Ulex europaeus Ulex europaeus 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Urtica dioica Urtica dioica 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Valeriana officinalis Valeriana officinalis subsp. officinalis 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Veronica scutellata Veronica scutellata 3 0 1 x NA
968394 IR-Ireland2008 Vascular plant 1 Vicia cracca Vicia cracca 3 0 1 x NA
1048670 NL-Floranld_2013 Vascular plant 1 Aster tripolium Tripolium pannonicum subsp. tripolium 3 0 10 01 NA
1048670 NL-Floranld_2013 Vascular plant 1 Atriplex littoralis Atriplex littoralis 3 0 1 r NA
1048670 NL-Floranld_2013 Vascular plant 1 Atriplex portulacoides Halimione portulacoides 3 0 60 06 NA
1048670 NL-Floranld_2013 Vascular plant 1 Atriplex prostrata Atriplex prostrata 3 0 1 p NA
1048670 NL-Floranld_2013 Vascular plant 1 Elytrigia atherica Elytrigia atherica 3 0 30 03 NA
1048670 NL-Floranld_2013 Vascular plant 1 Festuca rubra aggr. (incl. F. arenaria) Festuca rubra aggr. 1 0 1 p NA
1048670 NL-Floranld_2013 Vascular plant 1 Puccinellia maritima Puccinellia maritima 3 0 1 p NA
1048670 NL-Floranld_2013 Vascular plant 1 Spartina anglica Spartina anglica 3 0 1 r NA
1048670 NL-Floranld_2013 Vascular plant 1 Suaeda maritima Suaeda maritima 3 0 1 p NA

Match species names from DT0 to those in Backbone

Import taxonomic backbone

load("../_output/Backbone3.0.RData")

Match to DT0, using Taxonomic concept as matching key. This is the field that was used to build, and resolve, the Backbone.

DT1 <- DT0 %>% 
  left_join(Backbone %>% 
              dplyr::select(Name_sPlot_TRY, Name_short, `Taxon group`, Rank_correct) %>%
              rename(`Matched concept`=Name_sPlot_TRY,
                     Taxongroup_BB=`Taxon group`), 
            by="Matched concept") %>% 
  # Simplify Rank_correct
  mutate(Rank_correct=fct_collapse(Rank_correct, 
                                   lower=c("subspecies", "variety", "infraspecies", "race", "forma"))) %>% 
  mutate(Rank_correct=fct_explicit_na(Rank_correct, "No_match")) %>% 
  mutate(Name_short=replace(Name_short, 
                            list=Name_short=="No suitable", 
                            values=NA))

Explore name matching based on Backbone v1.2

Select species entries that changed after taxonomic standardization, as a way to check the backbone.

name.check <- DT1 %>% 
  dplyr::select(`Turboveg2 concept`:`Matched concept`, Name_short) %>% 
  rename(Name_TNRS=Name_short) %>% 
  distinct() %>% 
  mutate(Matched_short=word(`Matched concept`, start = 1L, end=2L)) %>% 
  filter(is.na(Name_TNRS) | Matched_short != Name_TNRS) %>%
  dplyr::select(-Matched_short) %>% 
  arrange(Name_TNRS)
Check 30 random species names from DT that changed name after matching to backbone
Turboveg2 concept Matched concept Name_TNRS
Listera caurina Listera caurina Neottia banksiana
Strychnos darienensis Strychnos darienensis Strychnos bredemeyeri
Ageratum conyzoides  Ageratum conyzoides  Ageratum
Valerianella species Valerianella species Valerianella
Ilex sp1_CUCSUR1 Ilex sp1_CUCSUR1 Ilex
Dendrobium ruppianum f. ruppianum Dendrobium ruppianum f. ruppianum Dendrobium jonesii
Scenedesmus quadrispina Scenedesmus quadrispina Scenedesmus
Ocotea species #11 Ocotea species #11 Ocotea
Sumpfgladiole haarig 135607 Sumpfgladiole haarig 135607 Gladiolus
Schizaea species Schizaea species Schizaea
Plectranthus Rupestris Plectranthus Rupestris Plectranthus hadiensis
Dichanthelium leibergii Dichanthelium leibergii Panicum leibergii
Melastomataceae species #16 Melastomataceae species #16 Melastomataceae
Linealblatt krgst 155502 Linealblatt krgst 155502 NA
Elaeocarpus cf.  Elaeocarpus cf.  Elaeocarpus
Asteraceae Bl dickfleischig B gelb 134183 Asteraceae Bl dickfleischig B gelb 134183 Compositae
Lycopodium complanatum var. chamaecyparissus Lycopodium complanatum var. chamaecyparissus Lycopodium tristachyum
Glycosmis pentaphylla  Glycosmis pentaphylla  Glycosmis
Acacia drummond subsp. elegans Porongu var. (R.J. Cumming 938) Acacia drummond subsp. elegans Porongu var. (R.J. Cumming 938) Acacia drummondii
Klimmer orange 132257 Klimmer orange 132257 NA
Freycinetia williamsii Freycinetia williamsii Freycinetia formosana
Lauraceae species [CMG 2805] Lauraceae species [CMG 2805] Lauraceae
Taraxacum sinicum128 Taraxacum sinicum128 Taraxacum sinicum
Ochrolechia species Ochrolechia species Ochrolechia
Enemion_biternatum species Enemion_biternatum species Enemion biternatum
Elymus andinus Elymus andinus Elymus angulatus
Dryopteris x mantoniae Dryopteris x mantoniae Dryopteris mantoniae
Uapaca species [M1] Uapaca species [M1] Uapaca
Lanzettblatt Fr. rot (Munkudi) 136374 Lanzettblatt Fr. rot (Munkudi) 136374 NA
Juncus cognatus Juncus cognatus Juncus dichotomus

Check the most common species names from DT after matching to backbone

name.check.freq <- DT1 %>% 
  dplyr::select(`Turboveg2 concept`:`Matched concept`, Name_short) %>% 
  rename(Name_TNRS=Name_short) %>% 
  group_by(`Turboveg2 concept`, `Matched concept`, Name_TNRS) %>% 
  summarize(n=n()) %>% 
  mutate(Matched_short=word(`Matched concept`, start = 1L, end=2L)) %>% 
  filter(is.na(Name_TNRS) | Matched_short != Name_TNRS) %>%
  dplyr::select(-Matched_short) %>% 
  ungroup() %>% 
  arrange(desc(n)) 
## `summarise()` regrouping output by 'Turboveg2 concept', 'Matched concept' (override with `.groups` argument)
Check 40 most common species names from DT that changed name after matching to backbone
Turboveg2 concept Matched concept Name_TNRS n
Deschampsia flexuosa Avenella flexuosa Deschampsia flexuosa 126514
Festuca pratensis Schedonorus pratensis Festuca pratensis 84008
Elymus repens Elytrigia repens Elymus repens 82891
Phalaris arundinacea Phalaroides arundinacea Phalaris arundinacea 75296
Bryophyta species Bryophyta species NA 74393
Poa annua Ochlopoa annua Poa annua 67460
Potentilla anserina Argentina anserina Potentilla anserina 63786
Taraxacum sect. Ruderalia Taraxacum sect. Taraxacum Taraxacum 58429
Taraxacum species Taraxacum species Taraxacum 57167
Cornus sanguinea Cornus sanguinea Cornus controversa 52651
Elytrigia repens Elytrigia repens Elymus repens 51670
Taraxacum officinale Taraxacum sect. Taraxacum Taraxacum 50502
Weinmannia racemosa Weinmannia racemosa Leiospermum racemosum 38269
Bromus erectus Bromopsis erecta Bromus erectus 33765
Cladonia species Cladonia species Cladonia 32464
Avenella flexuosa Avenella flexuosa Deschampsia flexuosa 30787
Rubus sect. Rubus Rubus sect. Rubus Rubus 28684
Festuca arundinacea Schedonorus arundinaceus Festuca arundinacea 26124
Trientalis europaea Trientalis europaea Lysimachia europaea 25940
Rubus fruticosus aggr. Rubus fruticosus aggr. Rubus vestitus 23669
Glaux maritima Glaux maritima Lysimachia maritima 23305
Taraxacum officinale aggr. Taraxacum sect. Taraxacum Taraxacum 22837
Rubus species Rubus species Rubus 22098
Festuca gigantea Schedonorus giganteus Festuca gigantea 20917
Taraxacum sectie Ruderalia Taraxacum sect. Taraxacum Taraxacum 20888
Lophozonia menziesii Lophozonia menziesii Lophozonia 20249
Juncus gerardi Juncus gerardi Juncus gerardii 19094
Sphagnum species Sphagnum species Sphagnum 18293
Festuca rupicola Festuca stricta subsp. sulcata Festuca rupicola 18010
Rosa species Rosa species Rosa 16657
Podocarpus laetus Podocarpus laetus Podocarpus spinulosus 16356
Bromus tectorum Anisantha tectorum Bromus tectorum 16302
Carex species Carex species Carex 15744
Ripogonum scandens Ripogonum scandens Rhipogonum 14984
Rubus hirtus Rubus hirtus aggr. Rubus proiectus 14191
Avenula pubescens Avenula pubescens Helictotrichon pubescens 13490
Notogrammitis billardierei Notogrammitis billardierei NA 13117
Crataegus species Crataegus species Crataegus 13072
Helictotrichon pubescens Avenula pubescens Helictotrichon pubescens 12941
Erophila verna Draba verna Erophila verna 12646

Complete field taxon group

Taxon group information is only available for 35699079 entries, but absent for 7394395. To improve the completeness of this field, we derive additional info from the Backbone, and merge it with the data already present in DT.

table(DT1$`Taxon group`, exclude=NULL)
## 
##           Alga         Lichen           Moss       Mushroom      Stonewort 
##           9497         324002        2034938            513          12166 
##        Unknown Vascular plant 
##        7394395       33317963
DT1 <- DT1 %>% 
  mutate(`Taxon group`=ifelse(`Taxon group`=="Unknown", NA, `Taxon group`)) %>% 
  mutate(Taxongroup_BB=ifelse(Taxongroup_BB=="Unknown", NA, Taxongroup_BB)) %>% 
  mutate(`Taxon group`=coalesce(`Taxon group`, Taxongroup_BB)) %>% 
  dplyr::select(-Taxongroup_BB)


table(DT1$`Taxon group`, exclude=NULL)
## 
##           Alga         Lichen           Moss       Mushroom      Stonewort 
##           9991         366919        2090925            513          12166 
## Vascular plant           <NA> 
##       40522355          90605

Those taxa for which a measures of Basal Area exists can be safely assumed to belong to vascular plants

DT1 <- DT1 %>% 
  mutate(`Taxon group`=replace(`Taxon group`, 
                               list=`Cover code`=="x_BA", 
                               values="Vascular plant"))

Cross-complement Taxon group information. This means that, whenever a taxon is marked to belong to one group, then assign the same taxon to that group throughout the DT table.

DT1 <- DT1 %>% 
  left_join(DT1 %>% 
              filter(!is.na(Name_short)) %>% 
              filter(`Taxon group` != "Unknown") %>% 
              dplyr::select(Name_short, `Taxon group`) %>% 
              distinct(Name_short, .keep_all=T) %>% 
              rename(TaxonGroup_compl=`Taxon group`),
            by="Name_short") %>% 
  mutate(`Taxon group`=coalesce(`Taxon group`, TaxonGroup_compl)) %>% 
  dplyr::select(-TaxonGroup_compl)

table(DT1$`Taxon group`, exclude=NULL)
## 
##           Alga         Lichen           Moss       Mushroom      Stonewort 
##           9994         367508        2100558            513          12193 
## Vascular plant           <NA> 
##       40523933          78775

Check species with conflicting Taxon group information and fix manually.

#check for conflicts in attribution of genera to Taxon groups
DT1 %>% 
  filter(!is.na(Name_short)) %>% 
  filter(!is.na(`Taxon group`)) %>% 
  distinct(Name_short, `Taxon group`) %>% 
  mutate(Genus=word(Name_short,1)) %>% 
  dplyr::select(Genus, `Taxon group`) %>% 
  distinct() %>% 
  group_by(Genus) %>% 
  summarize(n=n()) %>% 
  filter(n>1) %>% 
  arrange(desc(n))
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 15 x 2
##    Genus                 n
##    <chr>             <int>
##  1 Brachytheciastrum     2
##  2 Brachythecium         2
##  3 Chara                 2
##  4 Characeae             2
##  5 Hepatica              2
##  6 Hypericum             2
##  7 Hypnum                2
##  8 Leptorhaphis          2
##  9 Lychnothamnus         2
## 10 Nitella               2
## 11 Oxymitra              2
## 12 Pancovia              2
## 13 Peltaria              2
## 14 Tonina                2
## 15 Zygodon               2

Manually fix some known problems in Taxon group attribution. Some lists of taxa (e.g., lichen.genera, mushroom.genera) were defined when building the Backbone.

#Attach genus info
DT1 <- DT1 %>% 
    left_join(Backbone %>% 
              dplyr::select(Name_sPlot_TRY, Name_short) %>%
              mutate(Genus=word(Name_short, 1, 1)) %>%
              dplyr::select(-Name_short) %>% 
              rename(`Matched concept`=Name_sPlot_TRY),
            by="Matched concept") %>% 
    mutate(`Taxon group`=fct_collapse(`Taxon group`, 
                                    Alga_Stonewort=c("Alga", "Stonewort")))
#manually fix some known problems
mosses.gen    <- c("Hypnum", "Brachytheciastrum","Brachythecium","Hypnum",  
                  "Zygodon", "Oxymitra", "Bryophyta", "Musci", '\\\"Moos\\\"')
vascular.gen  <- c("Polystichum", "Hypericum", "Peltaria", "Pancovia", "Calythrix", "Ripogonum",
                  "Notogrammitis", "Fuscospora", "Lophozonia",  "Rostellularia", 
                  "Hesperostipa", "Microsorium", "Angiosperm","Dicotyledonae", "Spermatophy", 
                  "Oxymitra", "Friesodielsia")
alga.gen      <- c("Chara", "Characeae", "Tonina", "Nostoc", "Entermorpha", "Hydrocoleum" )
 
DT1 <- DT1 %>% 
  mutate(`Taxon group`=replace(`Taxon group`, 
                               list=Genus %in% mosses.gen, 
                               values="Moss")) %>% 
  mutate(`Taxon group`=replace(`Taxon group`, 
                               list=Genus %in% vascular.gen, 
                               values="Vascular plant")) %>% 
  mutate(`Taxon group`=replace(`Taxon group`, 
                               list=Genus %in% alga.gen, 
                               values="Alga_Stonewort")) %>% 
  mutate(`Taxon group`=replace(`Taxon group`, 
                               list=Genus %in% c(lichen.genera, "Lichenes"),
                               values="Lichen")) %>% 
  mutate(`Taxon group`=replace(`Taxon group`, 
                               list=Genus %in% mushroom, 
                               values="Mushroom"))
  
table(DT1$`Taxon group`, exclude=NULL)
## 
## Alga_Stonewort         Lichen           Moss       Mushroom Vascular plant 
##          23098         367509        2100635            513       40525774 
##           <NA> 
##          75945

Delete all records of fungi, and use lists of genera to fix additional problems. While in the previous round the matching was done on the resolved Genus name, here the match is based on unresolved Genus names.

DT1 <- DT1 %>% 
  dplyr::select(-Genus) %>% 
  left_join(DT1 %>% 
              distinct(`Matched concept`) %>% 
              mutate(Genus=word(`Matched concept`, 1)), 
            by="Matched concept") %>% 
  mutate(`Taxon group`=replace(`Taxon group`, 
                                 list=Genus %in% mushroom, 
                                 values = "Mushroom")) %>% 
  mutate(`Taxon group`=replace(`Taxon group`, 
                               list=Genus %in% lichen.genera, 
                               values="Lichen")) %>% 
  mutate(`Taxon group`=replace(`Taxon group`, 
                               list=Genus %in% mosses.gen, 
                               values="Moss")) %>% 
  mutate(`Taxon group`=replace(`Taxon group`, 
                               list=Genus %in% vascular.gen, 
                               values="Vascular plant")) %>% 
  mutate(`Taxon group` = fct_explicit_na(`Taxon group`, "Unknown")) %>% 
  filter(`Taxon group`!="Mushroom") %>%
  mutate(`Taxon group`=factor(`Taxon group`))
  #dplyr::select(-Genus)

table(DT1$`Taxon group`, exclude=NULL)
## 
## Alga_Stonewort         Lichen           Moss Vascular plant        Unknown 
##          23098         367855        2103292       40563071          35721

After cross-checking all sources of information, the number of taxa not having Taxon group information decreased to 35721 entries

Standardize abundance values

Species abundance information varies across datasets and plots. While for the large majority of plots abundance values are returned as percentage cover, there is a subset where abundance is returned with different scales. These are marked in the column Cover code as follows:
x_BA - Basal Area
x_IC - Individual count
x_SC - Stem count
x_IV - Relative Importance
x_RF - Relative Frequency
x - Presence absence
Still, it’s not really intuitive that in case Cover code belongs to one of the classes above, then the actual abundance value is stored in the x_ column. This stems from the way this data is stored in TURBOVEG.
To make the cover data more user friendly, I simplify the way cover it is stored, so that there are only two columns:
Ab_scale - to report the type of scale used
Abundance - to coalesce the cover\abundance values previously in the columns Cover % and x_.

# Create Ab_scale field
DT1 <- DT1 %>% 
  mutate(Ab_scale = ifelse(`Cover code` %in% 
                             c("x_BA", "x_IC", "x_SC", "x_IV", "x_RF") & !is.na(x_), 
                           `Cover code`, 
                           "CoverPerc"))  

Fix some errors. There are some plots where all species have zeros in the field Cover %. Some of them are marked as p\a (Cover code=="x"), but other not. Consider all this plots as presence\absence and transform Cover % to 1.

allzeroes <- DT1 %>% 
  group_by(PlotObservationID) %>% 
  summarize(allzero=all(`Cover %`==0) ) %>% 
  filter(allzero==T) %>% 
  pull(PlotObservationID)
## `summarise()` ungrouping output (override with `.groups` argument)
DT1 <- DT1 %>% 
  mutate(`Cover %`=replace(`Cover %`, 
                           list=(PlotObservationID %in% allzeroes), 
                           values=1)) %>% 
  mutate(`Cover code`=replace(`Cover code`, 
                           list=(PlotObservationID %in% allzeroes), 
                           values="x"))

Consider all plot-layer combinations where Cover code=="x", and all the entries of the field Cover % == 1 as presence\absence data, and transform Ab_scale to “pa”. This is done to avoid confusion with plots where Cover code=="x" but “x” has to be intended as a class in the cover scale used. For p\a plots, replace the field Cover % with NA, and assign the value 1 to the field x_.

#plots with at least one entry in Cover code=="x"
sel <- DT1 %>% 
  filter(`Cover code`=="x") %>% 
  distinct(PlotObservationID) %>% 
  pull(PlotObservationID)

DT1 <- DT1 %>% 
  left_join(DT1 %>%
              filter(PlotObservationID %in% sel) %>% 
              group_by(PlotObservationID, Layer) %>% 
              mutate(to.pa= all(`Cover %`==1 & `Cover code`=="x")) %>% 
              distinct(PlotObservationID, Layer, to.pa), 
            by=c("PlotObservationID", "Layer")) %>% 
  replace_na(list(to.pa=F)) %>% 
  mutate(Ab_scale=ifelse(to.pa==T, "pa", Ab_scale)) %>% 
  mutate(`Cover %`=ifelse(to.pa==T, NA, `Cover %`)) %>% 
  mutate(x_=ifelse(to.pa==T, 1, x_)) %>% 
  dplyr::select(-to.pa)

There are also some plots having different cover scales in the same layer. They are not many, and I will reduce their cover value to p\a.
Find these plots first:

mixed <- DT1 %>% 
  distinct(PlotObservationID, Ab_scale, Layer) %>% 
  group_by(PlotObservationID, Layer) %>% 
  summarize(n=n()) %>% 
  filter(n>1) %>% 
  pull(PlotObservationID) %>% 
  unique()
## `summarise()` regrouping output by 'PlotObservationID' (override with `.groups` argument)
length(mixed)
## [1] 335

Transform these plots to p\a and correct field Ab_scale. Note: the column Abundance is only created here.

DT1 <- DT1 %>% 
  mutate(Ab_scale=replace(Ab_scale, 
                           list=PlotObservationID %in% mixed, 
                           values="mixed")) %>%
  mutate(`Cover %`=replace(`Cover %`, 
                           list=Ab_scale=="mixed",
                           values=NA)) %>% 
  mutate(x_=replace(x_,  list=Ab_scale=="mixed", values=1)) %>% 
  mutate(Ab_scale=replace(Ab_scale, list=Ab_scale=="mixed", values="pa")) %>% 
  #Create additional field Abundance to avoid overwriting original data
  mutate(Abundance =ifelse(Ab_scale %in% c("x_BA", "x_IC", "x_SC", "x_IV", "x_RF", "pa"), 
                          x_, `Cover %`)) %>% 
  mutate(Abundance=replace(Abundance, 
                           list=PlotObservationID %in% mixed, 
                           values=1))

Double check and summarize Ab_scales

scale_check <- DT1 %>% 
  distinct(PlotObservationID, Layer, Ab_scale) %>% 
  group_by(PlotObservationID) %>% 
  summarise(Ab_scale_combined=ifelse(length(unique(Ab_scale))==1, 
                                     unique(Ab_scale), 
                                     "Multiple_scales"))
## `summarise()` ungrouping output (override with `.groups` argument)
nrow(scale_check)== length(unique(DT1$PlotObservationID))
## [1] TRUE
table(scale_check$Ab_scale_combined)
## 
##       CoverPerc Multiple_scales              pa            x_BA            x_IC 
##         1690405            2084          271057            6293            2092 
##            x_IV            x_RF            x_SC 
##             146             585            4878

Calculate species’ relative covers in each plot

Transform abundances to relative abundance. For consistency with the previous version of sPlot, this field is called Relative_cover.
Watch out - Even plots with p\a information are transformed to relative cover.

DT1 <- DT1 %>% 
  left_join(x=., 
            y={.} %>%
              group_by(PlotObservationID) %>% 
              summarize(tot.abundance=sum(Abundance)), 
            by=c("PlotObservationID")) %>% 
  mutate(Relative.cover=Abundance/tot.abundance)
## `summarise()` ungrouping output (override with `.groups` argument)
# check: there should be no plot where the sum of all relative covers !=0
DT1 %>% 
  group_by(PlotObservationID) %>% 
  summarize(tot.cover=sum(Relative.cover), 
            num.layers=sum(unique(Layer))) %>% 
  filter(tot.cover != num.layers) %>% 
  nrow()
## `summarise()` ungrouping output (override with `.groups` argument)
## [1] 1957767

Clean DT and export

DT2 <- DT1 %>% 
  dplyr::select(PlotObservationID, Name_short, `Turboveg2 concept`, Rank_correct, `Taxon group`, Layer:x_, Ab_scale, Abundance, Relative.cover ) %>% 
  rename(Species_original=`Turboveg2 concept`, 
         Species=Name_short,
         Taxon_group=`Taxon group`, 
         Cover_perc=`Cover %`, 
         Cover_code=`Cover code`, 
         Relative_cover=Relative.cover) %>% 
  ## change in Version 1.1.
  dplyr::select(-x_, -Cover_perc)

The output of the DT table contains 43093037 records, over 1977540 plots. The total number of taxa is 116256 and 0, before and after standardization, respectively. Information on the Taxon group is available for 76548 standardized species.

Example of initial DT table (same 3 randomly selected plots shown above)
PlotObservationID Species Species_original Rank_correct Taxon_group Layer Cover_code Ab_scale Abundance Relative_cover
705955 Aconitum napellus Aconitum napellus species Vascular plant 0 1 CoverPerc 3 0.0285714
705955 Adenostyles alliariae Adenostyles alliariae species Vascular plant 0 5 CoverPerc 88 0.8380952
705955 Arabis alpina Arabis alpina species Vascular plant 0
CoverPerc 2 0.0190476
705955 Cirsium spinosissimum Cirsium spinosissimum species Vascular plant 0
CoverPerc 2 0.0190476
705955 Doronicum grandiflorum Doronicum grandiflorum species Vascular plant 0
CoverPerc 2 0.0190476
705955 Peucedanum ostruthium Peucedanum ostruthium species Vascular plant 0 1 CoverPerc 3 0.0285714
705955 Primula elatior Primula elatior species Vascular plant 0
CoverPerc 2 0.0190476
705955 Tozzia alpina Tozzia alpina species Vascular plant 0 1 CoverPerc 3 0.0285714
968394 Agrostis capillaris Agrostis capillaris species Vascular plant 0 x pa 1 0.0136986
968394 Agrostis stolonifera Agrostis stolonifera species Vascular plant 0 x pa 1 0.0136986
968394 Alopecurus pratensis Alopecurus pratensis species Vascular plant 0 x pa 1 0.0136986
968394 Anthoxanthum odoratum Anthoxanthum odoratum species Vascular plant 0 x pa 1 0.0136986
968394 Bellis perennis Bellis perennis species Vascular plant 0 x pa 1 0.0136986
968394 Brachythecium albicans Brachythecium albicans species Moss 0 x pa 1 0.0136986
968394 Brachythecium rutabulum Brachythecium rutabulum species Moss 0 x pa 1 0.0136986
968394 Bryum pseudotriquetrum Bryum pseudotriquetrum var. bimum species Moss 0 x pa 1 0.0136986
968394 Calliergonella cuspidata Calliergonella cuspidata species Moss 0 x pa 1 0.0136986
968394 Callitriche stagnalis Callitriche stagnalis species Vascular plant 0 x pa 1 0.0136986
968394 Caltha palustris Caltha palustris species Vascular plant 0 x pa 1 0.0136986
968394 Cardamine pratensis Cardamine pratensis species Vascular plant 0 x pa 1 0.0136986
968394 Carex disticha Carex disticha species Vascular plant 0 x pa 1 0.0136986
968394 Carex leporina Carex leporina species Vascular plant 0 x pa 1 0.0136986
968394 Carex paniculata Carex paniculata species Vascular plant 0 x pa 1 0.0136986
968394 Cerastium fontanum Cerastium fontanum species Vascular plant 0 x pa 1 0.0136986
968394 Cirsium palustre Cirsium palustre species Vascular plant 0 x pa 1 0.0136986
968394 Crepis capillaris Crepis capillaris species Vascular plant 0 x pa 1 0.0136986
968394 Cynosurus cristatus Cynosurus cristatus species Vascular plant 0 x pa 1 0.0136986
968394 Deschampsia cespitosa Deschampsia cespitosa species Vascular plant 0 x pa 1 0.0136986
968394 Epilobium obscurum Epilobium obscurum species Vascular plant 0 x pa 1 0.0136986
968394 Epilobium parviflorum Epilobium parviflorum species Vascular plant 0 x pa 1 0.0136986
968394 Equisetum fluviatile Equisetum fluviatile species Vascular plant 0 x pa 1 0.0136986
968394 Equisetum sylvaticum Equisetum sylvaticum species Vascular plant 0 x pa 1 0.0136986
968394 Festuca rubra Festuca rubra species Vascular plant 0 x pa 1 0.0136986
968394 Filipendula ulmaria Filipendula ulmaria species Vascular plant 0 x pa 1 0.0136986
968394 Galium palustre Galium palustre species Vascular plant 0 x pa 1 0.0136986
968394 Glyceria declinata Glyceria declinata species Vascular plant 0 x pa 1 0.0136986
968394 Glyceria fluitans Glyceria fluitans species Vascular plant 0 x pa 1 0.0136986
968394 Gnaphalium uliginosum Gnaphalium uliginosum species Vascular plant 0 x pa 1 0.0136986
968394 Holcus lanatus Holcus lanatus species Vascular plant 0 x pa 1 0.0136986
968394 Hypochaeris radicata Hypochaeris radicata species Vascular plant 0 x pa 1 0.0136986
968394 Isolepis setacea Isolepis setacea species Vascular plant 0 x pa 1 0.0136986
968394 Juncus acutiflorus Juncus acutiflorus species Vascular plant 0 x pa 1 0.0136986
968394 Juncus bufonius Juncus bufonius species Vascular plant 0 x pa 1 0.0136986
968394 Juncus bulbosus Juncus bulbosus species Vascular plant 0 x pa 1 0.0136986
968394 Juncus effusus Juncus effusus species Vascular plant 0 x pa 1 0.0136986
968394 Kindbergia praelonga Kindbergia praelonga species Moss 0 x pa 1 0.0136986
968394 Lathyrus pratensis Lathyrus pratensis species Vascular plant 0 x pa 1 0.0136986
968394 Scorzoneroides autumnalis Leontodon autumnalis species Vascular plant 0 x pa 1 0.0136986
968394 Lolium perenne Lolium perenne species Vascular plant 0 x pa 1 0.0136986
968394 Lotus pedunculatus Lotus pedunculatus species Vascular plant 0 x pa 1 0.0136986
968394 Silene flos-cuculi Lychnis flos-cuculi species Vascular plant 0 x pa 1 0.0136986
968394 Lythrum portula Lythrum portula species Vascular plant 0 x pa 1 0.0136986
968394 Lythrum salicaria Lythrum salicaria species Vascular plant 0 x pa 1 0.0136986
968394 Mentha aquatica Mentha aquatica species Vascular plant 0 x pa 1 0.0136986
968394 Persicaria maculosa Persicaria maculosa species Vascular plant 0 x pa 1 0.0136986
968394 Plantago lanceolata Plantago lanceolata species Vascular plant 0 x pa 1 0.0136986
968394 Poa annua Poa annua species Vascular plant 0 x pa 1 0.0136986
968394 Poa pratensis Poa pratensis species Vascular plant 0 x pa 1 0.0136986
968394 Comarum palustre Potentilla palustris species Vascular plant 0 x pa 1 0.0136986
968394 Prunella vulgaris Prunella vulgaris species Vascular plant 0 x pa 1 0.0136986
968394 Ranunculus acris Ranunculus acris species Vascular plant 0 x pa 1 0.0136986
968394 Ranunculus flammula Ranunculus flammula species Vascular plant 0 x pa 1 0.0136986
968394 Ranunculus repens Ranunculus repens species Vascular plant 0 x pa 1 0.0136986
968394 Rhytidiadelphus squarrosus Rhytidiadelphus squarrosus species Moss 0 x pa 1 0.0136986
968394 Rubus vestitus Rubus fruticosus aggr. species Vascular plant 0 x pa 1 0.0136986
968394 Rumex acetosa Rumex acetosa species Vascular plant 0 x pa 1 0.0136986
968394 Rumex obtusifolius Rumex obtusifolius species Vascular plant 0 x pa 1 0.0136986
968394 Sagina procumbens Sagina procumbens species Vascular plant 0 x pa 1 0.0136986
968394 Salix integra Salix x multinervis species Vascular plant 0 x pa 1 0.0136986
968394 Jacobaea aquatica Senecio aquaticus species Vascular plant 0 x pa 1 0.0136986
968394 Jacobaea vulgaris Senecio jacobaea species Vascular plant 0 x pa 1 0.0136986
968394 Sonchus asper Sonchus asper species Vascular plant 0 x pa 1 0.0136986
968394 Stellaria uliginosa Stellaria uliginosa species Vascular plant 0 x pa 1 0.0136986
968394 Taraxacum Taraxacum officinale aggr. genus Vascular plant 0 x pa 1 0.0136986
968394 Trifolium pratense Trifolium pratense species Vascular plant 0 x pa 1 0.0136986
968394 Trifolium repens Trifolium repens species Vascular plant 0 x pa 1 0.0136986
968394 Ulex europaeus Ulex europaeus species Vascular plant 0 x pa 1 0.0136986
968394 Urtica dioica Urtica dioica species Vascular plant 0 x pa 1 0.0136986
968394 Valeriana officinalis Valeriana officinalis higher Vascular plant 0 x pa 1 0.0136986
968394 Veronica scutellata Veronica scutellata species Vascular plant 0 x pa 1 0.0136986
968394 Vicia cracca Vicia cracca species Vascular plant 0 x pa 1 0.0136986
1048670 Tripolium pannonicum Aster tripolium lower Vascular plant 0 01 CoverPerc 10 0.0943396
1048670 Atriplex littoralis Atriplex littoralis species Vascular plant 0 r CoverPerc 1 0.0094340
1048670 Atriplex portulacoides Atriplex portulacoides species Vascular plant 0 06 CoverPerc 60 0.5660377
1048670 Atriplex prostrata Atriplex prostrata species Vascular plant 0 p CoverPerc 1 0.0094340
1048670 Elymus athericus Elytrigia atherica species Vascular plant 0 03 CoverPerc 30 0.2830189
1048670 Festuca rubra Festuca rubra aggr. (incl. F. arenaria) species Vascular plant 0 p CoverPerc 1 0.0094340
1048670 Puccinellia maritima Puccinellia maritima species Vascular plant 0 p CoverPerc 1 0.0094340
1048670 Spartina anglica Spartina anglica species Vascular plant 0 r CoverPerc 1 0.0094340
1048670 Suaeda maritima Suaeda maritima species Vascular plant 0 p CoverPerc 1 0.0094340

Field List

  • PlotObservationID - Plot ID, as in header.
  • Species - Resolved species name, based on taxonomic backbone
  • Species_original - Original species name, as provided by data contributor.
  • Rank_correct - Taxonomic rank at which Species_original was matched.
  • Taxon_group - Possible entries are: Alga_Stonewort, Lichen, Moss, Vascular plant, Unknown.
  • Layer - Vegetation layer, as specified in Turboveg: 0: No layer specified, 1: Upper tree layer, 2: Middle tree layer, 3: Lower tree layer, 4: Upper shrub layer, 5: Lower shrub layer, 6: Herb layer, 7: Juvenile, 8: Seedling, 9: Moss layer.
  • Cover_code - Cover\abundance value in original data, before transformation to percentage cover.
  • Ab_scale - Abundance scale in original data. Possible values are: CoverPerc: Cover Percentage, pa: Presence absence, x_BA: Basal Area, x_IC: Individual count, x_SC: Stem count, x_IV: Relative Importance, x_RF: Relative Frequency.
  • Abundance - Abundance value, in original value, or as transformed from original Cover code to quantitative values.
  • Relative_cover - Abundance of each species after being normalized to 1 in each plot.
  • save(DT2, file = "../_output/DT_sPlot3.0.RData")

    SessionInfo

    ## R version 3.6.3 (2020-02-29)
    ## Platform: x86_64-pc-linux-gnu (64-bit)
    ## Running under: Ubuntu 16.04.7 LTS
    ## 
    ## Matrix products: default
    ## BLAS:   /usr/lib/openblas-base/libblas.so.3
    ## LAPACK: /usr/lib/libopenblasp-r0.2.18.so
    ## 
    ## locale:
    ##  [1] LC_CTYPE=en_US.UTF-8          LC_NUMERIC=C                 
    ##  [3] LC_TIME=en_US.UTF-8           LC_COLLATE=en_US.UTF-8       
    ##  [5] LC_MONETARY=en_US.UTF-8       LC_MESSAGES=en_US.UTF-8      
    ##  [7] LC_PAPER=en_US.UTF-8          LC_NAME=en_US.UTF-8          
    ##  [9] LC_ADDRESS=en_US.UTF-8        LC_TELEPHONE=en_US.UTF-8     
    ## [11] LC_MEASUREMENT=en_US.UTF-8    LC_IDENTIFICATION=en_US.UTF-8
    ## 
    ## attached base packages:
    ## [1] stats     graphics  grDevices utils     datasets  methods   base     
    ## 
    ## other attached packages:
    ##  [1] kableExtra_1.3.1 knitr_1.30       xlsx_0.6.5       forcats_0.5.0   
    ##  [5] stringr_1.4.0    dplyr_1.0.2      purrr_0.3.4      readr_1.4.0     
    ##  [9] tidyr_1.1.2      tibble_3.0.1     ggplot2_3.3.0    tidyverse_1.3.0 
    ## 
    ## loaded via a namespace (and not attached):
    ##  [1] tidyselect_1.1.0  xfun_0.19         rJava_0.9-13      haven_2.3.1      
    ##  [5] colorspace_2.0-0  vctrs_0.3.5       generics_0.1.0    viridisLite_0.3.0
    ##  [9] htmltools_0.5.0   yaml_2.2.1        utf8_1.1.4        rlang_0.4.9      
    ## [13] pillar_1.4.3      glue_1.4.2        withr_2.3.0       DBI_1.1.0        
    ## [17] dbplyr_2.0.0      modelr_0.1.6      readxl_1.3.1      lifecycle_0.2.0  
    ## [21] munsell_0.5.0     gtable_0.3.0      cellranger_1.1.0  rvest_0.3.6      
    ## [25] evaluate_0.14     ps_1.4.0          xlsxjars_0.6.1    fansi_0.4.1      
    ## [29] highr_0.8         broom_0.7.0       Rcpp_1.0.5        scales_1.1.1     
    ## [33] backports_1.2.0   webshot_0.5.2     jsonlite_1.7.1    fs_1.5.0         
    ## [37] hms_0.5.3         digest_0.6.25     stringi_1.5.3     grid_3.6.3       
    ## [41] cli_2.2.0         tools_3.6.3       magrittr_2.0.1    crayon_1.3.4     
    ## [45] pkgconfig_2.0.3   ellipsis_0.3.1    xml2_1.3.2        reprex_0.3.0     
    ## [49] lubridate_1.7.9.2 assertthat_0.2.1  rmarkdown_2.5     httr_1.4.2       
    ## [53] rstudioapi_0.13   R6_2.5.0          compiler_3.6.3