https://github.com/tom-n-walker/uphill-plants-soil-carbon
Tip revision: 951e73295060ad88bddf5d48a3aa4b9d90475312 authored by Tom Walker on 07 September 2021, 14:32:36 UTC
Merge branch 'main' of github.com:tom-n-walker/uphill-plants-soil-carbon into main
Merge branch 'main' of github.com:tom-n-walker/uphill-plants-soil-carbon into main
Tip revision: 951e732
process_try.R
################################################################################
#### Project: Lowland plant migrations alpine soil C loss
#### Title: Function | Process TRY data
#### Author: Tom Walker (thomas.walker@usys.ethz.ch)
#### Date: 27 May 2021
#### ---------------------------------------------------------------------------
process_try <- function(cover_data, full_try){
## Collate my species names ----
# get all species
sppList <- unique(do.call(c, lapply(cover_data$all_cover, colnames)))
# format output
allSpp <- sppList %>%
# split string by period and make data frame
str_split(., "\\.", simplify = T) %>%
as.data.frame %>%
# add original accepted name (changing period for space)
mutate(accepted_name = str_replace_all(sppList, "\\.", " ")) %>%
# rename columns
select(accepted_name, genus = V1, species = V2, subspecies = V3) %>%
# replace empty elements with NA
replace(., . == "", NA)
## Subset and join TRY to my species ----
# match to TRY
sppMatch <- !is.na(match(full_try$accepted_name, allSpp$accepted_name, incomparables = NA))
genMatch <- !is.na(match(full_try$genus, allSpp$genus, incomparables = NA))
# join to species and/or names
sppTraits <- allSpp %>%
left_join(., full_try[sppMatch, ], "accepted_name")
genTraits <- allSpp %>%
left_join(., full_try[sppMatch, ], c("genus" = "accepted_name"))
# add genus-level traits where species traits absent
sppMissing <- is.na(sppTraits$species)
sppTraits[sppMissing, 12:19] <- genTraits[sppMissing, 12:19]
## Format selected trait data ----
# impute, set up data frame and return
imputed <- apply_mice(select(sppTraits, leaf_area:stem_density), 5)
okTraits <- bind_cols(select(sppTraits, accepted_name), imputed)
# identify as lowland or alpine
lowlands <- map(cover_data$focal_cover, colnames) %>%
do.call(c, .) %>%
unique %>%
str_replace_all(., "\\.", " ")
out <- okTraits %>%
mutate(is_focal = ifelse(accepted_name %in% lowlands, "yes", "no")) %>%
# remove leaf P (poor coverage) and SSD (poor coverage; all herbs)
select(accepted_name, is_focal, leaf_area:leaf_N, plant_height:SLA)
return(out)
}