Timestamp: Fri Nov 13 11:53:06 2020
Drafted: Francesco Maria Sabatini
Version: 1.0

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 5510382 records, across 1243968 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("LDCM"),
                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/shrub     herb\\shrub herb/shrub/tree           other           shrub 
##              40               8               2              58            7928 
##      shrub/tree     shrub\\tree            tree            <NA> 
##             105              29           13555              92
#
# 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 SLA_mean SLA_sd PlantHeight_mean PlantHeight_sd Wood.vessel.length_mean WoodFiberLength_mean Wood.vessel.length_sd WoodFiberLength_sd SpecificRootLength_mean
Dillenia eximia tree TRUE 1 0.6793376 NA 22.639961 NA 44.57928 NA 10.54365 NA 12.4911119 NA 299.8186 567.8233 NA NA 967.6425
Neolitsea australiensis tree TRUE 7 0.5792000 0.0024933 9.506151 0.2596111 30.23718 0.3760617 15.80171 0.2652343 7.9068383 0.4256402 376.1127 844.4782 6.503023 9.313165 1656.2206
Phyllanthus welwitschianus shrub FALSE 8 0.6753104 0.0130232 65.281333 4.6574508 36.61334 1.8540340 11.23265 0.4071654 2.0744872 0.8694553 334.8895 657.5239 26.904739 48.401052 4172.6647
Platymiscium tree TRUE 183 0.7367135 0.0570886 8.752809 0.8330028 60.10325 5.0651172 18.66448 6.1165028 10.7226177 3.1893958 492.5852 1254.5929 40.384016 74.824275 867.0790
Oxandra laurifolia tree TRUE 1 0.5884923 NA 19.187258 NA 89.03682 NA 21.26191 NA 9.2218572 NA 516.4728 1013.2987 NA NA 906.8100
Flindersia schottiana tree TRUE 45 0.5841551 0.0097030 32.568851 1.1659233 39.34159 1.1731701 16.64684 4.1421922 15.0675958 0.6137072 814.5528 1327.9419 18.152491 16.305176 417.2301
Pentas schimperi shrub FALSE 12 0.5994127 0.0085421 101.582042 10.6407222 37.25850 5.5948394 16.82194 0.3987059 1.5952465 1.0000603 429.1172 710.6441 85.197367 81.569313 6680.3624
Ditaxis catamarcensis shrub NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Sideritis pusilla shrub FALSE 1 0.4451498 NA 63.553638 NA 29.81245 NA 18.76373 NA 0.4582831 NA 374.2586 544.4329 NA NA 713.5340
Erythrina sandwicensis tree TRUE 3 0.3473648 0.0041953 5.449391 0.2433384 83.52936 0.5031719 13.11726 0.1739220 8.4680174 0.8741256 309.1997 1009.0911 2.017808 20.160225 1643.9625
Cytisus filipes shrub FALSE 1 0.3918256 NA 64.145759 NA 70.33197 NA 17.32879 NA 1.4899027 NA 557.8850 733.0138 NA NA 446.3924
Gaultheria phillyreifolia shrub NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Tilia europaea tree TRUE 4 0.4558695 0.0190405 88.081677 5.8414605 54.53532 0.5138064 21.92167 0.2783723 32.2072947 11.1902462 332.8352 695.6468 6.060288 17.853047 2722.3237
Astrocasia peltata tree TRUE NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Erythroxylum hondense shrub NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Duguetia surinamensis tree TRUE 69 0.8236290 0.0162819 24.385029 1.2262742 134.87025 4.7318346 13.52768 2.3291569 16.4117221 1.7789890 591.9557 1289.1331 21.840571 39.750879 789.2354
Nolina bigelovii tree TRUE 1 0.3974529 NA 31.073291 NA 17.02055 NA 19.86053 NA 1.1087419 NA 388.3643 749.1778 NA NA 2435.8136
Drypetes NA TRUE 3 0.7221564 0.0292078 33.585934 2.7312624 48.57965 1.6676046 11.35004 0.2093386 16.9021891 5.2380642 385.6425 1007.3347 4.931223 32.358909 3019.2382
Casearia obliqua tree TRUE 18 0.6995384 0.0270568 76.679193 1.6766962 73.50555 1.5930822 30.95529 2.9574296 13.6778866 2.5524964 368.3871 835.8742 12.147442 21.108464 5987.5761
Zygia unifoliolata shrub 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] 8547337

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] 7304230

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: 5 x 2
##   PlotObservationID tot.cover
##               <dbl>     <dbl>
## 1            143374         1
## 2            451004         1
## 3            685954         1
## 4            746410         1
## 5           1133820         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::rename(species=Species) %>%
              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)
## `summarise()` ungrouping output (override with `.groups` argument)
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
CWM.xylem08 <- CWM.xylem %>%
  filter(trait.coverage>=0.8)
Number of plots with >=.8 coverage per trait
trait num.plots
Ks 92391
P50 328855
#Create list of plots having at least one trait with >=.8 coverage and extract header data

#plot80perc <- (CWM.xylem %>%
#  dplyr::select(PlotObservationID) %>%
#  distinct())$PlotObservationID

#DT.xylem08 <- DT.xylem %>%
#  filter(PlotObservationID %in% header.xylem$PlotID)

#CWM.xylem <- CWM.xylem %>%
#  filter(PlotObservationID %in% header.xylem$PlotID) 
Completeness of header data
Header file - Columns present and % completeness
Completeness_perc
GIVD ID 99.9944532
TV2 relevé number 100.0000000
ORIG_NUM 0.0047429
GUID 100.0000000
Longitude 100.0000000
Latitude 100.0000000
Location uncertainty (m) 95.2326748
Country 99.9040972
CONTINENT 100.0000000
sBiome 99.2994997
sBiomeID 99.2994997
Ecoregion 99.2824574
EcoregionID 99.2824574
Locality 60.0678635
Relevé area (m²) 72.9285641
Cover abundance scale 100.0000000
Date of recording 87.1815834
Plants recorded 99.9995177
Herbs identified (y/n) 2.7118865
Mosses identified (y/n) 28.1309487
Lichens identified (y/n) 16.5480141
elevation_dem 76.7620228
Altitude (m) 84.2275686
Aspect (°) 32.4671535
Slope (°) 42.1329970
Forest 74.7368903
Shrubland 74.7368903
Grassland 74.7368903
Wetland 74.7368903
Sparse.vegetation 74.7368903
Naturalness 47.8299281
ESY 72.6619977
Cover total (%) 21.1678275
Cover tree layer (%) 17.0949735
Cover shrub layer (%) 18.6166364
Cover herb layer (%) 36.1539847
Cover moss layer (%) 18.1638113
Cover lichen layer (%) 0.3121463
Cover algae layer (%) 0.0567539
Cover litter layer (%) 4.5210166
Cover open water (%) 0.1392319
Cover bare rock (%) 1.7043043
Height (highest) trees (m) 7.5995524
Height lowest trees (m) 0.4962346
Height (highest) shrubs (m) 5.0405637
Height lowest shrubs (m) 0.5556413
Aver. height (high) herbs (cm) 9.5914847
Aver. height lowest herbs (cm) 2.7044104
Maximum height herbs (cm) 2.4628447
Maximum height cryptogams (mm) 0.1219485

The process results in 1243968 plots selected, for a total of 1932708 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 115 Anne D. Bjorkman
00-RU-001 1100 Vassiliy Martynenko
00-RU-002 1044 Milan Chytrý
00-RU-006 1079 Sergey Yamalov
00-RU-XXX 186 Olga Demina
00-TR-001 6653 Ali Kavgacı
00-TR-002 962 Deniz Işık Gürsoy
AF-00-001 80 Marco Schmidt
AF-00-003 80 Norbert Jürgens
AF-00-003 80 Norbert Jürgens
AF-00-006 1070 Miguel Alvarez
AF-00-008 207 Hjalmar Kühl
AF-00-009 189 Rasmus Revermann
AF-00-010 16 Petr Sklenar
AF-00-011 93 Bruno Herault
AF-CD-001 18 Kim Sarah Jacobsen
AF-CM-001 57 Jiri Dolezal
AF-EG-XXX 1596 Mohamed Abd El-Rouf Mousa El-Sheikh
AF-ET-001 36 Desalegn Wana
AF-MA-001 203 Manfred Finckh
AF-NA-001 9 Ben Strohbach
AF-ZA-003 1736 John Janssen
AF-ZW-001 20 Cyrus Samimi
AS-00-001 4536 Tomáš Černý
AS-00-003 629 Arkadiusz Nowak
AS-BD-001 150 Mohammed A.S. Arfin Khan
AS-CN-001 84 Hongyan Liu
AS-CN-002 32 Karsten Wesche
AS-CN-003 27 Helge Bruelheide
AS-CN-004 380 Zhiyao Tang
AS-CN-007 843 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 809 Jiri Dolezal
AS-IR-001 810 Jalil Noroozi
AS-IR-006 1193 Hamid Gholizadeh
AS-JP-002 46720 Yasuhiro Kubota
AS-KG-001 439 Peter Borchardt
AS-KZ-001 57 Viktoria Wagner
AS-MN-001 147 Henrik von Wehrden
AS-RU-001 112 Victor Chepinoga
AS-RU-002 3345 Andrey Korolyuk
AS-RU-004 158 Norbert Hölzel
AS-RU-005 530 Igor Lavrinenko
AS-SA-001 17 Mohamed Abd El-Rouf Mousa El-Sheikh
AS-TJ-001 15 Kim André Vanselow
AS-TR-002 1145 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 12767 John Thomas Hunter
AU-AU-XXX 4405 Paul David Macintyre
AU-NC-001 137 Jérôme Munzinger
AU-NZ-001 15738 Susan Wiser
AU-PG-001 63 Timothy Whitfeld
EU-00-002 3831 Jürgen Dengler
EU-00-004 3486 Xavier Font
EU-00-004a 1606 Borja Jiménez-Alfaro
EU-00-004b 2401 Xavier Font
EU-00-004c 5805 Maria Pilar Rodríguez-Rojo
EU-00-004d 1449 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 922 Rosario G Gavilán
EU-00-011 11801 Idoia Biurrun
EU-00-013 4540 Kiril Vassilev
EU-00-016 493 Corrado Marcenò
EU-00-017 244 John Janssen
EU-00-018 9097 Jonathan Lenoir
EU-00-019 11044 Kiril Vassilev
EU-00-020 1319 Flavia Landucci
EU-00-021 3714 Andraž Carni
EU-00-022 3825 Tomáš Peterka
EU-00-023 6251 Juan Antonio Campos
EU-00-024 4548 Idoia Biurrun
EU-00-026 6764 Gianmaria Bonari
EU-00-027 12982 Anni Pyykönen
EU-00-028 7983 Filip Küzmič
EU-AL-001 237 Michele De Sanctis
EU-AT-001 40800 Wolfgang Willner
EU-BE-002 18242 Els De Bie
EU-BG-001 3935 Iva Apostolova
EU-CH-005 14182 Thomas Wohlgemuth
EU-CH-011 5010 Ariel Bergamini
EU-CZ-001 67465 Milan Chytrý
EU-DE-001 26234 Florian Jansen
EU-DE-013 19540 Florian Jansen
EU-DE-014 44179 Ute Jandt
EU-DE-020 4607 Ricarda Pätsch
EU-DE-035 2997 Maike Isermann
EU-DE-040 2119 Joachim Schrautzer
EU-DK-002 124884 Jesper Erenskjold Moeslund
EU-ES-001 1024 Aaron Pérez-Haase
EU-FR-003 132104 Emmanuel Garbolino
EU-FR-005 5012 Jean-Claude Gegout
EU-GB-001 29058 John S. Rodwell
EU-GB-XXX 22387 Irina Tatarenko
EU-GR-001 2410 Erwin Bergmeier
EU-GR-005 4696 Panayotis Dimopoulos
EU-GR-006 3182 Ioannis Tsiripidis
EU-HR-001 2941 Zvjezdana Stančić
EU-HR-002 7306 Željko Škvorc
EU-HU-003 4842 János Csiky
EU-IE-001 17901 Úna FitzPatrick
EU-IT-001 6832 Roberto Venanzoni
EU-IT-010 3707 Laura Casella
EU-IT-011 19597 Emiliano Agrillo
EU-IT-019 552 Angela Stanisci
EU-LT-001 6713 Valerijus Rašomavičius
EU-LV-001 5179 Solvita Rūsiņa
EU-MK-001 791 Renata Ćušterevska
EU-NL-001 117910 Stephan M. Hennekens
EU-PL-001 53216 Zygmunt Kącki
EU-PL-003 3849 Remigiusz Pielech
EU-RO-007 9586 Adrian Indreica
EU-RO-008 17914 Eszter Ruprecht
EU-RS-002 2417 Svetlana Aćić
EU-RS-003 3408 Mirjana Cuk
EU-RU-002 1563 Valentin Golub
EU-RU-003 204 Tatiana Lysenko
EU-RU-011 8147 Vadim Prokhorov
EU-RU-014 4824 Larisa Khanina
EU-SI-001 15590 Urban Šilc
EU-SK-001 29122 Milan Valachovič
EU-UA-001 2446 Anna Kuzemko
EU-UA-005 598 Tetiana Dziuba
EU-UA-006 2079 Viktor Onyshchenko
NA-00-002 1294 Luis Cayuela
NA-CA-003 38 Viktoria Wagner
NA-CA-004 147 Isabelle Aubin
NA-CA-005 89 Yves Bergeron
NA-CU-XXX 207 Ute Jandt
NA-GL-001 35 Birgit Jedrzejek
NA-US-002 55282 Robert K. Peet
NA-US-006 15302 Robert K. Peet
NA-US-008 551 Donald Waller
NA-US-014 1390 Donald A. Walker
NA-US-016 490 Dylan Craven
SA-00-002 176 Gwendolyn Peyre
SA-00-003 220 Glenda Mendieta-Leiva
SA-AR-002 232 Melisa Giorgis
SA-AR-003 141 Karina Speziale
SA-BO-003 73 Michael Kessler
SA-BR-002 1576 Alexander Christian Vibrans
SA-CL-002 213 Alvaro G. Gutierrez
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
NA 69 NA

The data derive from 156 datasets.

4 Extract climate and soils data

soilclim.xylem <- soilclim %>% 
  filter(PlotObservationID %in% plot.sel) %>% 
  dplyr::select(Elevation=Elevation_median, -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.
Elevation
0
509
NA
107
NA
183
1025
NA
687
33
382
50
27
NA
NA
592
84
34
NA
87

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-18      sf_0.9-3          sp_1.4-4         
##  [5] downloader_0.4    gridExtra_2.3     viridis_0.5.1     viridisLite_0.3.0
##  [9] kableExtra_1.3.1  knitr_1.30        forcats_0.5.0     stringr_1.4.0    
## [13] dplyr_1.0.2       purrr_0.3.4       readr_1.4.0       tidyr_1.1.2      
## [17] tibble_3.0.1      ggplot2_3.3.0     tidyverse_1.3.0  
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_1.0.5         lubridate_1.7.9    lattice_0.20-41    class_7.3-17      
##  [5] utf8_1.1.4         assertthat_0.2.1   digest_0.6.25      R6_2.5.0          
##  [9] cellranger_1.1.0   backports_1.2.0    reprex_0.3.0       evaluate_0.14     
## [13] e1071_1.7-4        highr_0.8          httr_1.4.2         pillar_1.4.3      
## [17] rlang_0.4.8        readxl_1.3.1       rstudioapi_0.11    rmarkdown_2.5     
## [21] labeling_0.4.2     webshot_0.5.2      munsell_0.5.0      broom_0.7.0       
## [25] compiler_3.6.3     modelr_0.1.6       xfun_0.19          pkgconfig_2.0.3   
## [29] htmltools_0.5.0    tidyselect_1.1.0   codetools_0.2-18   fansi_0.4.1       
## [33] crayon_1.3.4       dbplyr_2.0.0       withr_2.3.0        jsonlite_1.7.1    
## [37] gtable_0.3.0       lifecycle_0.2.0    DBI_1.1.0          magrittr_1.5      
## [41] units_0.6-7        scales_1.1.1       KernSmooth_2.23-18 cli_2.1.0         
## [45] stringi_1.5.3      farver_2.0.3       fs_1.5.0           xml2_1.3.2        
## [49] ellipsis_0.3.1     generics_0.1.0     vctrs_0.3.4        tools_3.6.3       
## [53] glue_1.4.2         maps_3.3.0         hms_0.5.3          yaml_2.2.1        
## [57] colorspace_1.4-1   classInt_0.4-3     rvest_0.3.6        haven_2.3.1