Revision 05e1672664e587a3808d326d6f78d29ca5e44c01 authored by Tom Walker on 07 September 2021, 14:31:53 UTC, committed by Tom Walker on 07 September 2021, 14:32:33 UTC
1 parent bd5cb92
Raw File
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)  
}
back to top