Timestamp: Tue Mar 9 14:22:05 2021
Drafted: Francesco Maria Sabatini
Version: 1.2

Changes to version 1.2 - Corrected final selection of plots in header. Only plots with CWM info are retained, but no minimum trait coverage threshold is used.

This report documents the data extraction for sPlot project proposal #31 - The adaptive value of xylem physiology within and across global ecoregions as requested by Daniel Laughlin and Jesse Robert Fleri

library(tidyverse)

library(knitr)
library(kableExtra)
library(viridis)
library(grid)
library(gridExtra)

library(downloader)
library(sp)
library(sf)
library(rgdal)
library(rgeos)

#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")

Import data from sPlot 3.0

#Import sPlot data
load("/data/sPlot/releases/sPlot3.0/header_sPlot3.0.RData")
load("/data/sPlot/releases/sPlot3.0/DT_sPlot3.0.RData")
load("/data/sPlot/releases/sPlot3.0/Traits_CWMs_sPlot3.RData")
load("/data/sPlot/releases/sPlot3.0/SoilClim_sPlot3.RData")

Import data on xylem traits, provided by Jesse Robert Fleri on October 26th, 2020.

load("xylem_data.RData")

1 Extract plots from sPlot based on species with xylem traits

Extract all plots containing at least one species in the xylem list.

species_list <- xylem_data$Species
plot.sel <- DT2 %>%
  filter(DT2$Species %in% species_list) %>%
  dplyr::select(PlotObservationID) %>%
  distinct() %>%
  pull(PlotObservationID)

#exclude plots without geographic information
header.xylem <- header %>%
  filter(PlotObservationID %in% plot.sel) %>% 
  filter(!is.na(Latitude))
#refine plot.sel
plot.sel <- header.xylem$PlotObservationID

DT.xylem <- DT2 %>% 
  filter(Taxon_group %in% c("Vascular plant", "Unknown")) %>% 
  filter(PlotObservationID %in% plot.sel)

Out of the 1841 species in the sRoot list, 1306 species are present in sPlot, for a total of 5510288 records, across 1243899 plots.

2 Extract woody species

This is partial selection, as we don’t have information on the growth form of all species in sPlot

#Select all woody species and extract relevant traits from TRY
woody_species_traits <- sPlot.traits %>%
  dplyr::select(Species, GrowthForm, is.tree.or.tall.shrub, n,
                starts_with("StemDens"),
                starts_with("Stem.cond.dens"), 
                starts_with("StemConduitDiameter"),
                starts_with("LDMC"),
                starts_with("SLA"),
                starts_with("PlantHeight"), 
                starts_with("Wood"), 
                starts_with("SpecificRootLength_mean")) %>%
  filter( (Species %in% species_list) |
          grepl(pattern = "tree|shrub", x = GrowthForm) |
          is.tree.or.tall.shrub==T
              ) %>% 
  #counter proof - exclude species == herb
  filter(GrowthForm != "herb" | is.na(GrowthForm))

table(woody_species_traits$GrowthForm, exclude=NULL)
## 
##            herb      herb/shrub herb/shrub/tree           other           shrub 
##               0              48               2              55            7826 
##      shrub/tree            tree            <NA> 
##             133           13458              66
#
# MEMO for FMS: some standardization needed in sPlot 3.0 for GF names
Example of gap-filled trait data from TRY (20 randomly selected species)
Species GrowthForm is.tree.or.tall.shrub n StemDens_mean StemDens_sd Stem.cond.dens_mean Stem.cond.dens_sd StemConduitDiameter_mean StemConduitDiameter_sd LDMC_mean LDMC_sd SLA_mean SLA_sd PlantHeight_mean PlantHeight_sd Wood.vessel.length_mean WoodFiberLength_mean Wood.vessel.length_sd WoodFiberLength_sd SpecificRootLength_mean
Ladenbergia macrophylla tree TRUE NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Heisteria silvianii tree TRUE 8 0.6762992 0.0039185 39.971238 2.3217612 68.17812 1.2590447 0.4187767 0.0051907 9.446712 0.3804836 15.4541716 1.3085587 656.4609 1413.8549 16.905524 25.463370 1589.533
Holmbergia tweedii shrub FALSE 1 0.5592053 NA 66.367393 NA 37.51859 NA 0.2650414 NA 9.331602 NA 0.5372286 NA 368.9059 722.9950 NA NA 3877.866
Lorentzianthus viscidus shrub FALSE 2 0.5012427 0.0016781 54.705967 5.7547491 51.20226 4.5698400 0.2511843 0.0030958 18.703215 0.5603608 0.4570992 0.0125571 510.4968 1054.5602 21.772039 37.362471 6070.531
Decodon verticillatus shrub FALSE 3 0.5897748 0.0020175 24.005301 0.2790654 63.22109 1.8803617 0.3311110 0.0010592 15.333479 0.0855408 2.4233108 0.0311564 507.0536 879.8216 11.233850 12.001534 1804.982
Eugenia sericifolia tree TRUE NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Trema micrantha tree TRUE 176 0.3277559 0.0315968 9.891342 0.7172357 30.89997 1.2852766 0.3013928 0.0274817 20.094386 5.1464276 5.7700172 3.2884235 168.8283 542.5530 5.636455 16.713892 8047.617
Indigofera pratensis shrub FALSE 1 0.7056221 NA 79.112989 NA 17.72589 NA 0.3908649 NA 9.450473 NA 1.0496519 NA 336.3511 695.5926 NA NA 1723.567
Erica sicula shrub FALSE 3 0.5586180 0.0033580 140.972169 1.9528244 33.34904 0.3602492 0.3838020 0.0024163 7.919960 0.1110790 0.3204382 0.0236398 368.8125 526.3998 5.199629 5.644479 1910.942
Gymnosporia arbutifolia shrub FALSE 1 0.5926094 NA 43.735160 NA 58.12411 NA 0.4041459 NA 8.179975 NA 3.3344554 NA 467.9014 812.9055 NA NA 1586.298
Colubrina californica shrub FALSE 1 0.7089661 NA 19.146630 NA 45.05276 NA 0.2977724 NA 16.361801 NA 1.5205370 NA 298.9593 761.9694 NA NA 1227.350
Psychotria microbotrys tree TRUE 3 0.4465341 0.0008933 28.665664 0.7193217 74.37041 2.8193075 0.2745901 0.0017542 16.699685 0.4876918 1.8241852 0.1100895 507.1929 970.1061 23.180652 29.991476 3917.999
Chrysothamnus parryi shrub FALSE 40 0.5899503 0.0263214 74.026752 9.0053405 27.00712 18.3447501 0.3096080 0.0294865 13.561447 4.7727490 0.9318287 0.3828284 345.1405 772.6801 64.236758 249.633946 2035.198
Mendoncia combretoides tree TRUE NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Eucalyptus leptophleba tree TRUE 6 0.8983216 0.0301123 17.779656 0.4158652 31.32770 0.5986533 0.5047220 0.0026239 4.713942 0.0625239 14.7463629 0.5992100 239.4705 685.6999 3.791384 7.708404 1705.412
Boscia senegalensis tree TRUE 21 0.6063877 0.0065775 13.458022 0.5729693 111.50938 3.2017994 0.4059514 0.0115763 6.492858 0.5829151 9.2247665 0.3489693 337.1864 1393.1038 10.101772 13.739736 4170.179
Siparuna lepidota shrub NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Metrosideros perforata shrub FALSE 13 0.6660570 0.0024276 26.250216 1.1350435 33.19168 0.7916471 0.4658608 0.0032118 5.252154 0.0777398 5.5900771 1.2875581 329.6599 843.0825 6.925344 19.542284 4201.249
Acrotriche rigida shrub FALSE 9 0.6468565 0.0111561 218.319190 15.7158099 26.67313 1.7522792 0.4624648 0.0370097 5.623042 2.8218414 0.2331505 0.0407264 379.7983 572.4147 17.231533 19.085635 678.583
Myrcia heringii tree TRUE NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

Selected traits are:

Codes correspond to those reported in TRY

#subset DT.xylem to only retain woody species
DT.xylem <- DT.xylem %>% 
  filter(Species %in% (woody_species_traits$Species))
nrow(DT.xylem)
## [1] 8547026

Merge relative cover across vegetation layers, if needed, and normalize to 1 (=100%)

###combine cover values across layers
combine.cover <- function(x){
    while (length(x)>1){
      x[2] <- x[1]+(100-x[1])*x[2]/100
      x <- x[-1]
    }
    return(x)
}

DT.xylem <- DT.xylem %>%
  dplyr::select(PlotObservationID, Species,Layer, Relative_cover) %>%
  # normalize relative cover to 1 for each plot x layer combination
  left_join({.} %>% 
              group_by(PlotObservationID, Layer) %>% 
              summarize(Tot.Cover=sum(Relative_cover), .groups="drop"), 
            by=c("PlotObservationID", "Layer")) %>% 
  mutate(Relative_cover=Relative_cover/Tot.Cover) %>% 
  group_by(PlotObservationID, Species) %>%
  # merge layers together
  summarize(Relative_cover=combine.cover(Relative_cover), .groups="drop") %>%
  ungroup() %>% 
  # normalize relative cover to 1 after merging layers together
  left_join({.} %>% 
              group_by(PlotObservationID) %>% 
              summarize(Tot.Cover=sum(Relative_cover), .groups="drop"), 
            by="PlotObservationID") %>% 
  mutate(Relative_cover=Relative_cover/Tot.Cover) 

nrow(DT.xylem)
## [1] 7303930

double check that covers are properly standardized

DT.xylem %>% 
  filter(PlotObservationID %in% sample(header.xylem$PlotObservationID, 10, replace=F)) %>% 
  group_by(PlotObservationID) %>% 
  summarize(tot.cover=sum(Relative_cover), .groups="drop")
## # A tibble: 8 x 2
##   PlotObservationID tot.cover
## *             <dbl>     <dbl>
## 1             15529      1.00
## 2             33932      1   
## 3            304886      1   
## 4            371624      1   
## 5            406823      1   
## 6            880028      1   
## 7           1343439      1   
## 8           1841611      1

3 Calculate CWMs and trait coverage

Calculate CWM and trait coverage for each trait and each plot. Select plots having more than 80% coverage for at least one trait.

# Merge species data table with traits
CWM.xylem0 <- DT.xylem %>%
  as_tibble() %>%
  dplyr::select(PlotObservationID, Species, Relative_cover) %>%
  left_join(xylem_data %>%
              dplyr::select(Species, P50, Ks), 
            by="Species")

# Calculate CWM for each trait in each plot
CWM.xylem1 <- CWM.xylem0 %>%
  group_by(PlotObservationID) %>%
  summarize_at(.vars= vars(P50:Ks),
               .funs = list(~weighted.mean(., Relative_cover, na.rm=T)), 
               .groups="drop") %>%
  dplyr::select(PlotObservationID, order(colnames(.))) %>%
  pivot_longer(-PlotObservationID, names_to="trait", values_to="trait.value")

# Calculate coverage for each trait in each plot
CWM.xylem2 <- CWM.xylem0 %>%
  mutate_at(.funs = list(~if_else(is.na(.),0,1) * Relative_cover), 
            .vars = vars(P50:Ks)) %>%
  group_by(PlotObservationID) %>%
  summarize_at(.vars= vars(P50:Ks),
               .funs = list(~sum(., na.rm=T)), 
               .groups="drop") %>%
  dplyr::select(PlotObservationID, order(colnames(.))) %>%
  pivot_longer(-PlotObservationID, names_to="trait", values_to="trait.coverage")

# Calculate CWV
variance2.fun <- function(trait, abu){
  res <- as.double(NA)
  #nam <- nam[!is.na(trait)]
  abu <- abu[!is.na(trait)]
  trait <- trait[!is.na(trait)]
  abu <- abu/sum(abu)
  if (length(trait)>1){
    # you need more than 1 observation to calculate
    # skewness and kurtosis
    # for calculation see 
    # http://r.789695.n4.nabble.com/Weighted-skewness-and-curtosis-td4709956.html
    m.trait <- weighted.mean(trait,abu)
    res <- sum(abu*(trait-m.trait)^2)
  }
  res
}

CWM.xylem3 <- CWM.xylem0 %>%
  group_by(PlotObservationID) %>%
  summarize_at(.vars= vars(P50:Ks),
               .funs = list(~variance2.fun(., Relative_cover))) %>%
  dplyr::select(PlotObservationID, order(colnames(.))) %>%
  pivot_longer(-PlotObservationID, names_to="trait", values_to="trait.variance")

## Calculate proportion of species having traits
CWM.xylem4 <- CWM.xylem0 %>%
  group_by(PlotObservationID) %>%
  summarize_at(.vars= vars(P50:Ks),
               .funs = list(~sum(!is.na(.)))) %>%
  dplyr::select(PlotObservationID, order(colnames(.))) %>%
  pivot_longer(-PlotObservationID, names_to="trait", values_to="trait.nspecies")

# Join together
CWM.xylem <- CWM.xylem1 %>%
  left_join(CWM.xylem2, by=c("PlotObservationID", "trait")) %>%
  left_join(CWM.xylem3, by=c("PlotObservationID", "trait")) %>%
  left_join(CWM.xylem4, by=c("PlotObservationID", "trait")) %>%
  left_join(CWM.xylem0 %>% 
              group_by(PlotObservationID) %>%
              summarize(sp.richness=n()), by=c("PlotObservationID"), 
            .groups="drop") %>%
  mutate(trait.coverage.nspecies=trait.nspecies/sp.richness) %>%
  #filter(trait.coverage>=0.8) %>%
  arrange(PlotObservationID)
Example of CWM data file
PlotObservationID trait trait.value trait.coverage trait.variance trait.nspecies sp.richness trait.coverage.nspecies
5 Ks 1.6950265 0.1428571 NA 1 4 0.2500000
5 P50 -1.5003056 0.1428571 NA 1 4 0.2500000
16 Ks 0.1557417 0.4838710 0.0014506 2 7 0.2857143
16 P50 -2.3015323 0.5000000 0.5938076 3 7 0.4285714
17 Ks 0.3915309 0.6385457 0.1519621 5 7 0.7142857
17 P50 -3.2692863 0.6385457 3.5600373 5 7 0.7142857
18 Ks 0.4580143 0.1861111 0.0410046 4 10 0.4000000
18 P50 -3.8911671 0.8333333 5.0350743 8 10 0.8000000
19 Ks 0.7376319 0.3353176 0.1460626 5 14 0.3571429
19 P50 -3.3159887 0.6514433 1.2686962 9 14 0.6428571
20 Ks 0.3050261 0.0175439 0.0160221 2 7 0.2857143
20 P50 -2.7121667 0.1842105 1.0054947 3 7 0.4285714
21 Ks 0.3050261 0.5000000 0.0160221 2 8 0.2500000
21 P50 -3.8529856 0.8877551 4.3799595 3 8 0.3750000
22 Ks NaN 0.0000000 NA 0 2 0.0000000
22 P50 NaN 0.0000000 NA 0 2 0.0000000
26 Ks 0.4665221 0.4107143 0.0210918 2 8 0.2500000
26 P50 -3.8980845 0.5576923 1.2427961 5 8 0.6250000
27 Ks 0.1500000 0.0157895 NA 1 7 0.1428571
27 P50 -4.0094507 0.0263158 5.2985022 2 7 0.2857143
ggtc <- ggplot(data=CWM.xylem) +
  geom_density(aes(trait.coverage, col=trait)) + 
  xlab("Trait coverage (abundance)") +
  theme_bw()

ggnsp <- ggplot(data=CWM.xylem) +
  geom_density(aes(trait.coverage.nspecies, col=trait)) + 
  xlab("Trait coverage (Presence absence)") +
  theme_bw()

cowplot::plot_grid(ggtc, ggnsp, nrow=1)
Density of plots with CWM info, for increasing trait coverage.

Density of plots with CWM info, for increasing trait coverage.

#Create list of plots for which CWM data is available
plot.sel2 <- CWM.xylem %>%
      distinct(PlotObservationID) %>% 
      pull(PlotObservationID)

header.xylem <- header.xylem %>% 
  filter(PlotObservationID %in% plot.sel2)
Evaluate completeness of header data
Header file - Columns present and % completeness
Completeness_perc
GIVD ID 100.0000000
TV2 relevé number 100.0000000
ORIG_NUM 0.0000000
GUID 100.0000000
Longitude 100.0000000
Latitude 100.0000000
Location uncertainty (m) 95.1074577
Country 99.8797459
CONTINENT 100.0000000
sBiome 100.0000000
sBiomeID 100.0000000
Ecoregion 100.0000000
EcoregionID 100.0000000
Locality 59.7740630
Relevé area (m²) 72.2840109
Cover abundance scale 100.0000000
Date of recording 85.0595113
Plants recorded 99.9993791
Herbs identified (y/n) 3.1847681
Mosses identified (y/n) 26.9234710
Lichens identified (y/n) 17.4962511
elevation_dem 75.5433945
Altitude (m) 83.6372630
Aspect (°) 36.8752762
Slope (°) 45.8192028
Forest 70.9690806
Shrubland 70.9690806
Grassland 70.9690806
Wetland 70.9690806
Sparse.vegetation 70.9690806
Naturalness 45.6927393
ESY 68.2003380
Cover total (%) 17.8143761
Cover tree layer (%) 21.9656272
Cover shrub layer (%) 23.8610268
Cover herb layer (%) 36.6534994
Cover moss layer (%) 19.2709826
Cover lichen layer (%) 0.3776311
Cover algae layer (%) 0.0616794
Cover litter layer (%) 3.6399124
Cover open water (%) 0.1637195
Cover bare rock (%) 2.0438027
Height (highest) trees (m) 9.7244400
Height lowest trees (m) 0.6358359
Height (highest) shrubs (m) 6.4524308
Height lowest shrubs (m) 0.7119003
Aver. height (high) herbs (cm) 7.8689872
Aver. height lowest herbs (cm) 1.5863817
Maximum height herbs (cm) 2.2091780
Maximum height cryptogams (mm) 0.1291542

The process results in 966287 plots selected, for a total of 1932574 trait * plot combinations.

Geographical distribution of plots

countries <- map_data("world")
ggworld <- ggplot(countries, aes(x=long, y=lat, group = group)) +
  geom_polygon(col=NA, lwd=3, fill = gray(0.9)) +
  geom_point(data=header.xylem, aes(x=Longitude, y=Latitude, group=1), col="red", alpha=0.5, cex=0.7, shape="+") + 
  theme_bw()
ggworld

Summarize data across data sets in sPlot, and create list of data custodians

db.out <- read_csv("/data/sPlot/users/Francesco/_sPlot_Management/Consortium/Databases.out.csv") %>%
  dplyr::select(`GIVD ID`, Custodian)
data.origin <- header.xylem %>% 
   group_by(`GIVD ID`) %>% 
   summarize(Num.plot=n(), .groups="drop") %>%
   left_join(db.out)
Data Origin
GIVD ID Num.plot Custodian
00-00-001 1634 Oliver L. Phillips
00-00-003 2318 Brian Enquist
00-00-004 297 Risto Virtanen
00-00-005 66 Anne D. Bjorkman
00-RU-001 1100 Vasiliy Martynenko
00-RU-002 978 Milan Chytrý
00-RU-006 612 Sergey Yamalov
00-RU-XXX 137 Olga Demina
00-TR-001 6615 Ali Kavgacı
00-TR-002 962 Deniz Işık Gürsoy
AF-00-001 79 Marco Schmidt
AF-00-003 80 Norbert Jürgens
AF-00-003 80 Norbert Jürgens
AF-00-006 1069 Miguel Alvarez
AF-00-008 207 Hjalmar S. Kühl
AF-00-009 189 Rasmus Revermann
AF-00-010 16 Petr Sklenar
AF-00-011 93 Bruno Hérault
AF-CD-001 18 Kim Sarah Jacobsen
AF-CM-001 57 Jiri Dolezal
AF-EG-XXX 1557 Mohamed Abd El-Rouf Mousa El-Sheikh
AF-ET-001 36 Desalegn Wana
AF-MA-001 190 Manfred Finckh
AF-NA-001 9 Ben Strohbach
AF-ZA-003 1731 John A.M. Janssen
AF-ZW-001 20 Cyrus Samimi
AS-00-001 4536 Tomáš Černý
AS-00-003 329 Arkadiusz Nowak
AS-BD-001 150 Mohammed A.S. Arfin Khan
AS-CN-001 80 Hongyan Liu
AS-CN-002 9 Karsten Wesche
AS-CN-003 27 Helge Bruelheide
AS-CN-004 380 Zhiyao Tang
AS-CN-007 839 Zhiyao Tang
AS-CN-008 432 Hua-Feng Wang
AS-CN-XXX 70 Cindy Q. Tang
AS-EG-001 3 Mohamed Z. Hatim
AS-ID-001 23 Michael Kessler
AS-ID-002 142 Holger Kreft
AS-ID-XXX 622 Jiri Dolezal
AS-IR-001 490 Jalil Noroozi
AS-IR-006 1193 Hamid Gholizadeh
AS-JP-002 45765 Yasuhiro Kubota
AS-KG-001 167 Peter Borchardt
AS-KZ-001 17 Viktoria Wagner
AS-MN-001 142 Henrik von Wehrden
AS-RU-001 66 Victor Chepinoga
AS-RU-002 3045 Andrey Korolyuk
AS-RU-004 140 Norbert Hölzel
AS-RU-005 516 Igor Lavrinenko
AS-SA-001 17 Mohamed Abd El-Rouf Mousa El-Sheikh
AS-TJ-001 1 Kim André Vanselow
AS-TR-002 1144 Emin Uğurlu
AS-TW-001 885 Ching-Feng Li
AS-YE-001 8 Michele De Sanctis
AU-AU-002 7797 Ben Sparrow
AU-AU-003 12642 John Thomas Hunter
AU-AU-XXX 4404 Paul David Macintyre
AU-NC-001 137 Jérôme Munzinger
AU-NZ-001 15616 Susan K. Wiser
AU-PG-001 63 Timothy J.S. Whitfeld
EU-00-002 2732 Jürgen Dengler
EU-00-004 3486 Xavier Font
EU-00-004a 1390 Borja Jiménez-Alfaro
EU-00-004b 2184 Xavier Font
EU-00-004c 2834 Maria Pilar Rodríguez-Rojo
EU-00-004d 1434 Borja Jiménez-Alfaro
EU-00-004e 3616 Federico Fernández-González
EU-00-004f 9303 Federico Fernández-González
EU-00-004g 894 Rosario G Gavilán
EU-00-011 9322 Idoia Biurrun
EU-00-013 3980 Kiril Vassilev
EU-00-016 451 Corrado Marcenò
EU-00-017 164 John A.M. Janssen
EU-00-018 8550 Jonathan Lenoir
EU-00-019 10159 Kiril Vassilev
EU-00-020 975 Flavia Landucci
EU-00-021 3714 Andraž Carni
EU-00-022 3567 Tomáš Peterka
EU-00-023 6251 Juan Antonio Campos
EU-00-024 4548 Idoia Biurrun
EU-00-026 6756 Gianmaria Bonari
EU-00-027 12982 Anni Pyykönen
EU-00-028 2640 Filip Küzmič
EU-AL-001 221 Michele De Sanctis
EU-AT-001 36399 Wolfgang Willner
EU-BE-002 15285 Els De Bie
EU-BG-001 3211 Iva Apostolova
EU-CH-005 14181 Thomas Wohlgemuth
EU-CH-011 4352 Ariel Bergamini
EU-CZ-001 48695 Milan Chytrý
EU-DE-001 15747 Florian Jansen
EU-DE-013 6726 Florian Jansen
EU-DE-014 25995 Ute Jandt
EU-DE-020 3099 Ricarda Pätsch
EU-DE-035 1640 Maike Isermann
EU-DE-040 805 Joachim Schrautzer
EU-DK-002 100321 Jesper Erenskjold Moeslund
EU-ES-001 473 Aaron Pérez-Haase
EU-FR-003 113339 Emmanuel Garbolino
EU-FR-005 5012 Jean-Claude Gegout
EU-GB-001 14944 John S. Rodwell
EU-GB-XXX 236 Irina Tatarenko
EU-GR-001 2290 Erwin Bergmeier
EU-GR-005 4639 Panayotis Dimopoulos
EU-GR-006 3182 Ioannis Tsiripidis
EU-HR-001 1728 Zvjezdana Stančić
EU-HR-002 6155 Željko Škvorc
EU-HU-003 4037 János Csiky
EU-IE-001 10912 Úna FitzPatrick
EU-IT-001 6222 Roberto Venanzoni
EU-IT-010 3545 Laura Casella
EU-IT-011 18433 Emiliano Agrillo
EU-IT-019 511 Angela Stanisci
EU-LT-001 5124 Valerijus Rašomavičius
EU-LV-001 2303 Solvita Rūsiņa
EU-MK-001 661 Renata Ćušterevska
EU-NL-001 58172 Stephan M. Hennekens
EU-PL-001 41565 Zygmunt Kącki
EU-PL-003 3849 Remigiusz Pielech
EU-RO-007 9586 Adrian Indreica
EU-RO-008 11700 Eszter Ruprecht
EU-RS-002 1399 Svetlana Aćić
EU-RS-003 3080 Mirjana Cuk
EU-RU-002 1410 Valentin Golub
EU-RU-003 138 Tatiana Lysenko
EU-RU-011 7327 Vadim Prokhorov
EU-RU-014 4713 Larisa Khanina
EU-SI-001 13955 Urban Šilc
EU-SK-001 24391 Milan Valachovič
EU-UA-001 1097 Anna Kuzemko
EU-UA-005 507 Tetiana Dziuba
EU-UA-006 1949 Viktor Onyshchenko
NA-00-002 1294 Luis Cayuela
NA-CA-003 38 Viktoria Wagner
NA-CA-004 147 Isabelle Aubin
NA-CA-005 89 Philippe Marchand
NA-CU-XXX 207 Ute Jandt
NA-GL-001 35 Birgit Jedrzejek
NA-US-002 54539 Robert K. Peet
NA-US-006 15292 Robert K. Peet
NA-US-008 551 Donald Waller
NA-US-014 1389 Donald A. Walker
NA-US-016 490 Dylan Craven
SA-00-002 170 Gwendolyn Peyre
SA-00-003 220 Glenda Mendieta-Leiva
SA-AR-002 230 Melisa Giorgis
SA-AR-003 139 Karina Speziale
SA-BO-003 73 Michael Kessler
SA-BR-002 1576 Alexander Christian Vibrans
SA-CL-002 213 Alvaro G. Gutiérrez
SA-CL-003 100 Aníbal Pauchard
SA-CO-003 200 Esteban Alvarez-Davila
SA-EC-001 129 Jürgen Homeier
SA-EC-002 6 Gonzalo Rivas-Torres

The data derive from 155 datasets.

4 Extract climate and soils data

soilclim.xylem <- soilclim %>% 
  filter(PlotObservationID %in% plot.sel2) %>% 
  dplyr::rename(Elevation=Elevation_median) %>% 
  dplyr::select(-Elevation_q2.5, -Elevation_q97.5, -Elevation_DEM.res)
Example of climatic and soil variables for 20 randomly selected plots. All values represent the mean in a circle centered on the plot coordinates, having a radius equal to the plot’s location uncertainty (capped to 50 km for computing reasons). Standard deviation (sd) is also reported for each climatic and soil variable.
PlotObservationID Elevation bio01 bio02 bio03 bio04 bio05 bio06 bio07 bio08 bio09 bio10 bio11 bio12 bio13 bio14 bio15 bio16 bio17 bio18 bio19 bio01sd bio02sd bio03sd bio04sd bio05sd bio06sd bio07sd bio08sd bio09sd bio10sd bio11sd bio12sd bio13sd bio14sd bio15sd bio16sd bio17sd bio18sd bio19sd BLDFIE CECSOL CLYPPT CRFVOL ORCDRC PHIHOX SLTPPT SNDPPT BLDFIEsd CECSOLsd CLYPPTsd CRFVOLsd ORCDRCsd PHIHOXsd SLTPPTsd SNDPPTsd
1944710 3032 32.00000 127.00000 345.0000 7995.000 221.0000 -149.00000 370.0000 -31.00000 104.000000 142.0000 -77.000000 660.0000 78.00000 28.00000 26.00000 231.0000 96.0000 197.0000 186.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1122.8000 32.80000 21.800000 18.800000 68.40000 57.00000 40.60000 38.00000 30.227471 0.4472136 1.3038405 1.3038405 4.393177 0.0000000 1.1401754 1.4142136
1916052 817 88.00000 102.00000 311.0000 7696.000 280.0000 -48.00000 328.0000 -12.00000 205.000000 205.0000 -12.000000 685.0000 88.00000 21.00000 35.00000 259.0000 73.0000 73.0000 259.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 698.8333 27.83333 10.666667 12.833333 95.00000 56.33333 41.83333 47.66667 22.319647 1.9407902 0.5163978 3.4302575 6.228965 0.8164966 0.9831921 1.2110601
1494640 NA 98.02286 83.06286 279.8724 7372.890 251.9695 -45.42667 297.4533 183.65905 2.502857 197.7371 -3.135238 1300.6286 148.09524 66.92000 23.44952 412.3695 202.3600 391.9600 224.2705 8.659342 0.2429373 1.2634388 38.07615 9.177170 8.249963 1.061206 15.445915 8.202034 9.1269383 8.163103 162.74093 18.233810 9.374792 1.7593330 51.28681 28.424970 52.912937 32.00196 749.2215 25.95691 25.077279 12.944682 65.19468 59.35897 43.33737 31.57609 85.123443 3.4166064 3.3263059 2.6952591 16.276449 2.5497650 2.0668283 4.3713043
1819472 899 64.00000 51.00000 337.0000 3306.000 142.0000 -10.00000 152.0000 70.00000 17.000000 111.0000 17.000000 5336.0000 523.00000 358.00000 12.00000 1521.0000 1102.0000 1210.0000 1102.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 727.8000 39.40000 12.000000 31.200000 177.20000 52.20000 35.60000 52.60000 39.066610 2.4083189 0.0000000 4.3243497 8.318654 0.4472136 0.8944272 1.1401754
331350 48 84.00000 44.00000 215.0000 5666.000 194.0000 -9.00000 204.0000 68.00000 54.000000 165.0000 10.000000 842.0000 94.00000 46.00000 22.00000 276.0000 149.0000 226.0000 172.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 559.0000 11.42857 6.285714 8.285714 47.14286 53.85714 16.28571 77.42857 47.881799 0.5345225 0.4879500 0.4879500 7.755183 1.3451854 1.2535663 0.9759001
165379 NA 101.97390 43.56770 319.9772 3293.302 177.3687 41.23654 136.1223 63.00163 105.662317 150.7276 61.659054 1195.7618 130.73899 69.11093 22.13377 384.0326 220.0538 276.8532 306.2219 1.082830 1.6639392 5.3635298 39.02486 1.422668 1.984705 2.885003 2.735926 8.490970 0.9160016 1.491667 48.30326 5.990221 2.629166 0.6895947 18.80444 7.337034 8.668814 16.55708 426.2734 30.31971 20.383066 17.837410 106.36792 60.43024 37.80235 41.81726 48.747379 3.3263461 2.0298615 2.3976066 33.435885 2.3509428 2.3089200 3.7560478
1455323 277 89.00000 75.00000 256.0000 7712.000 240.0000 -52.00000 291.0000 188.00000 20.000000 190.0000 -17.000000 606.0000 83.00000 29.00000 37.00000 248.0000 87.0000 221.0000 99.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1072.5000 19.16667 20.666667 6.500000 25.00000 60.50000 47.83333 31.16667 39.312848 1.1690452 0.8164966 0.8366600 2.449490 1.3784049 2.5625508 2.7868740
1420284 NA 41.00000 83.00000 285.0000 7137.000 191.0000 -98.00000 290.0000 135.00000 -51.000000 138.0000 -57.000000 1524.0000 186.00000 64.00000 32.00000 552.0000 204.0000 535.0000 215.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 693.4000 33.00000 16.000000 15.800000 134.60000 45.60000 37.00000 47.00000 24.865639 0.7071068 0.0000000 0.8366600 11.371016 0.5477226 0.0000000 0.7071068
987690 420 163.00000 46.00000 228.0000 5418.000 274.0000 71.00000 203.0000 156.00000 232.000000 244.0000 95.000000 474.0000 87.00000 3.00000 67.00000 213.0000 11.0000 23.0000 155.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1209.7500 27.50000 27.250000 19.750000 30.75000 73.50000 40.00000 32.50000 9.464847 1.0000000 0.9574271 1.5000000 1.892969 0.5773503 0.8164966 0.5773503
19891 NA 44.75875 81.71087 290.7735 6949.753 188.5875 -92.21731 280.8840 135.60221 -42.456722 138.6685 -50.036832 1213.5138 157.58379 64.15654 27.54696 453.2118 212.8232 439.3425 262.2210 26.501319 0.4537785 3.0846418 120.56563 27.925956 24.592410 3.391897 27.969016 26.919750 27.7613157 24.639664 268.00790 37.803872 14.942923 4.1178561 107.32854 49.422178 98.974710 59.75895 736.9489 29.52463 16.586394 20.538798 113.13913 54.03106 40.07854 43.29845 74.868860 4.2626615 2.6847856 3.7852525 40.576396 3.4188101 3.1288340 5.0610356
1785533 730 115.00000 69.00000 232.0000 7927.000 263.0000 -35.00000 298.0000 208.00000 11.000000 227.0000 8.000000 1549.0000 241.00000 38.00000 55.00000 715.0000 130.0000 650.0000 158.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 944.4000 25.20000 21.400000 18.600000 70.00000 53.40000 38.00000 40.80000 26.292585 0.8366600 0.8944272 1.1401754 4.301163 0.5477226 1.2247449 1.0954451
1321029 NA 76.00000 74.00000 261.0000 7488.000 224.0000 -60.00000 284.0000 173.00000 -23.000000 175.0000 -25.000000 637.0000 93.00000 29.00000 44.00000 279.0000 89.0000 255.0000 99.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 801.0000 19.00000 17.000000 13.000000 30.00000 54.00000 44.00000 40.00000 NA NA NA NA NA NA NA NA
1906192 897 96.40987 82.34764 273.1845 7636.567 246.3112 -55.49356 301.7918 196.81760 66.401288 198.4764 -7.886266 1134.9013 125.17811 75.38627 15.74893 358.4871 227.7318 332.7146 262.2768 5.910209 0.4767326 0.9391471 36.98493 6.258909 5.290381 1.054238 6.255749 5.636280 6.2096422 5.241885 150.79271 17.559742 10.460008 0.7414378 49.12622 31.348868 43.442436 36.97896 939.7073 27.79152 19.648721 18.353701 92.49812 46.65612 43.04509 37.29327 78.770294 3.5633616 1.5622396 2.8756354 23.567323 2.9127945 1.9564479 2.6987173
1828009 1170 54.00000 54.00000 350.0000 3256.000 136.0000 -18.00000 154.0000 42.00000 102.000000 102.0000 10.000000 2355.0000 239.00000 130.00000 15.00000 697.0000 430.0000 430.0000 632.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 663.8000 40.80000 11.400000 20.400000 211.60000 50.00000 34.40000 54.20000 46.029339 5.1672043 0.5477226 3.5777088 4.277850 1.4142136 1.1401754 1.3038405
1541800 331 144.32179 70.16293 290.3829 5838.676 275.4236 33.86151 241.5519 170.82485 145.761711 231.7128 70.771894 641.0998 74.98778 31.28921 25.28513 218.9817 108.4725 138.9532 128.2668 11.000107 2.5518962 5.8281541 40.40745 10.581644 11.456090 4.017672 10.987464 76.646460 11.0949988 10.873151 96.12326 11.292939 5.807619 1.6487976 32.51426 19.256718 21.315986 22.22758 1230.4833 20.66854 23.452567 19.464729 31.76674 72.37166 37.60005 38.95468 120.219216 2.1869963 1.7558819 2.4716325 11.855030 3.6060499 1.7895185 2.3069776
1317768 NA 91.00000 70.00000 264.0000 7084.000 235.0000 -30.00000 265.0000 184.00000 -2.000000 187.0000 -2.000000 478.0000 69.00000 24.00000 33.00000 194.0000 76.0000 175.0000 76.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1043.0000 20.00000 15.000000 8.000000 38.00000 64.00000 22.00000 62.00000 NA NA NA NA NA NA NA NA
385820 56 83.00000 48.00000 234.0000 5556.000 194.0000 -10.00000 205.0000 68.00000 53.000000 163.0000 10.000000 857.0000 99.00000 47.00000 25.00000 293.0000 151.0000 226.0000 171.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 611.3333 11.83333 6.166667 7.166667 38.66667 53.83333 15.33333 78.50000 36.626038 0.7527727 1.4719601 0.9831921 3.265986 0.7527727 1.7511901 3.0166206
173431 108 94.00000 58.00000 325.0000 4160.000 193.0000 16.00000 177.0000 55.00000 150.000000 155.0000 42.000000 734.0000 79.00000 49.00000 15.00000 233.0000 153.0000 169.0000 165.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 574.0000 22.00000 21.333333 14.666667 66.83333 54.50000 39.16667 39.50000 24.859606 1.0954451 0.8164966 0.5163978 3.970726 1.0488088 0.7527727 1.6431677
702783 695 93.00000 75.00000 315.0000 5619.000 226.0000 -10.00000 237.0000 35.00000 168.000000 174.0000 21.000000 1326.0000 141.00000 84.00000 14.00000 405.0000 263.0000 272.0000 395.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 653.8000 22.20000 14.400000 16.000000 92.00000 49.00000 33.00000 53.00000 18.566098 0.8366600 0.5477226 1.0000000 11.575837 0.7071068 0.7071068 0.7071068
584588 1703 48.00000 81.00000 303.0000 6340.000 194.0000 -74.00000 268.0000 72.00000 -32.000000 139.0000 -34.000000 1537.0000 143.00000 103.00000 10.00000 424.0000 340.0000 353.0000 352.0000 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 743.8000 31.80000 19.600000 19.600000 125.60000 58.20000 35.80000 44.40000 18.833481 0.8366600 1.3416408 1.1401754 6.693280 0.8366600 0.4472136 1.8165902

The procedure used to obtain these environmental predictors is described here (Click to download the report)

Bioclimatic variables (bio01-bio19) derive from CHELSA

Codes:

Bio1 = Annual Mean Temperature
Bio2 = Mean Diurnal Range
Bio3 = Isothermality
Bio4 = Temperature Seasonality
Bio5 = Max Temperature of Warmest Month
Bio6 = Min Temperature of Coldest Month
Bio7 = Temperature Annual Range
Bio8 = Mean Temperature of Wettest Quarter
Bio9 = Mean Temperature of Driest Quarter
Bio10 = Mean Temperature of Warmest Quarter
Bio11 = Mean Temperature of Coldest Quarter
Bio12 = Annual Precipitation
Bio13 = Precipitation of Wettest Month
Bio14 = Precipitation of Driest Month
Bio15 = Precipitation Seasonality
Bio16 = Precipitation of Wettest Quarter
Bio17 = Precipitation of Driest Quarter
Bio18 = Precipitation of Warmest Quarter
Bio19 = Precipitation of Coldest Quarter

Soil variables (5 cm depth) derive from the ISRIC dataset, downloaded at 250-m resolution

CECSOL Cation Exchange capacity of soil
CLYPPT Clay mass fraction in %
CRFVOL Coarse fragments volumetric in %
ORCDRC Soil Organic Carbon Content in g/kg
PHIHOX Soil pH x 10 in H20
SLTPPT Silt mass fraction in %
SNDPPT Sand mass fraction in %
BLDFIE Bulk Density (fine earth) in kg/m3
P.ret.cat Phosphorous Retention - Categorical value, see ISRIC 2011-06

5 Export & SessionInfo

save( woody_species_traits, DT.xylem, CWM.xylem, header.xylem, soilclim.xylem,
      file="_derived/Xylem_sPlot.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=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] grid      stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
##  [1] rgeos_0.5-5       rgdal_1.5-23      sf_0.9-3          sp_1.4-5         
##  [5] downloader_0.4    gridExtra_2.3     viridis_0.5.1     viridisLite_0.3.0
##  [9] kableExtra_1.3.4  knitr_1.31        forcats_0.5.1     stringr_1.4.0    
## [13] dplyr_1.0.4       purrr_0.3.4       readr_1.4.0       tidyr_1.1.3      
## [17] tibble_3.0.1      ggplot2_3.3.0     tidyverse_1.3.0  
## 
## loaded via a namespace (and not attached):
##  [1] httr_1.4.2         sass_0.3.1         maps_3.3.0         jsonlite_1.7.2    
##  [5] modelr_0.1.6       bslib_0.2.4        assertthat_0.2.1   highr_0.8         
##  [9] cellranger_1.1.0   yaml_2.2.1         gdtools_0.2.3      pillar_1.4.3      
## [13] backports_1.2.1    lattice_0.20-41    glue_1.4.2         digest_0.6.25     
## [17] rvest_0.3.6        colorspace_2.0-0   cowplot_1.1.1      htmltools_0.5.1.1 
## [21] pkgconfig_2.0.3    broom_0.7.0        haven_2.3.1        scales_1.1.1      
## [25] webshot_0.5.2      svglite_1.2.3.2    generics_0.1.0     farver_2.1.0      
## [29] ellipsis_0.3.1     withr_2.4.1        cli_2.3.1          magrittr_2.0.1    
## [33] crayon_1.4.1       readxl_1.3.1       evaluate_0.14      fs_1.5.0          
## [37] fansi_0.4.2        xml2_1.3.2         class_7.3-18       tools_3.6.3       
## [41] hms_1.0.0          lifecycle_1.0.0    munsell_0.5.0      reprex_1.0.0      
## [45] compiler_3.6.3     jquerylib_0.1.3    e1071_1.7-4        systemfonts_1.0.1 
## [49] rlang_0.4.10       classInt_0.4-3     units_0.7-0        rstudioapi_0.13   
## [53] labeling_0.4.2     rmarkdown_2.7      gtable_0.3.0       DBI_1.1.1         
## [57] R6_2.5.0           lubridate_1.7.10   utf8_1.1.4         KernSmooth_2.23-18
## [61] stringi_1.5.3      Rcpp_1.0.5         vctrs_0.3.6        dbplyr_2.1.0      
## [65] tidyselect_1.1.0   xfun_0.21