-
-
Save damianooldoni/3fa9cc1ffa67377a9757df097d48d19f to your computer and use it in GitHub Desktop.
#' load packages | |
library(rgbif) | |
library(tidyverse) | |
#' example input | |
vernacular_names_df <- tibble( | |
id = c(1,2,3,4,5,6,7,8), | |
vernacular_name = c("Beenvissen", | |
"Bruine beer", | |
"Bont zandoogje", | |
"Bont zandoogje", | |
"Bruine beer", | |
"Beenvissen", | |
"Muscusrat > 400g", | |
"doodaars") | |
) | |
#' define get_vernacular_name() core function | |
#' input: a vernacular name | |
#' output: the best matched scientific name from the GBIF Backbone, NA_character_ if no match found | |
get_vernacular_name <- function(vn) { | |
names <- | |
name_lookup(vn, | |
datasetKey = "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c", | |
limit = 1)$data # this returns the most likely taxon | |
if (nrow(names) > 0) { | |
names$scientificName | |
} else { | |
NA_character_ | |
} | |
} | |
n_vernacular_names_df <- | |
vernacular_names_df %>% | |
# group by vernacular name and compact the data | |
group_by(vernacular_name) %>% | |
nest() %>% | |
# find scientific name for each (distinct) vernacular name | |
mutate(scientificName = map_chr(vernacular_name,get_vernacular_name)) %>% | |
# ungroup result | |
ungroup() %>% | |
# remove unneeded columns | |
select(-one_of("data")) %>% | |
# add other columns from input df vernacular_names_df | |
right_join(vernacular_names_df, by = "vernacular_name") %>% | |
# set new column scientificName at the right side | |
select(all_of(names(vernacular_names_df)), scientificName) %>% | |
# reorder rows based on original order in input df | |
right_join(vernacular_names_df, | |
by = names(vernacular_names_df)) | |
#' show results | |
n_vernacular_names_df |
je zou ook een extra output kunnen toevoegen die aangeeft dat er multiple matches waren, dat maakt het toch wat gemakkelijker voor de gebruiker om te zoeken naar problematische gevallen
In GBIF Backbone hebben de kingdoms de volgende keys:
- Animalia: higherTaxonKey = 1
- Archaea: higherTaxonKey = 2
- Bacteria: higherTaxonKey = 3
- Chromista: higherTaxonKey = 4
- Fungi: higherTaxonKey = 5
- Plantae: higherTaxonKey = 6
Protozoa: higherTaxonKey = 7
Viruses: higherTaxonKey = 8
Voorbeeld van de wouw:
name_lookup("wouw",
datasetKey = "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
limit = 1, higherTaxonKey = 1)$data$scientificName
output: In GBIF Backbone hebben de kingdoms de volgende keys:Animalia: higherTaxonKey = 1Archaea: higherTaxonKey = 2Bacteria: higherTaxonKey = 3Chromista: higherTaxonKey = 4Fungi: higherTaxonKey = 5Plantae: higherTaxonKey = 6
Protozoa: higherTaxonKey = 7Viruses: higherTaxonKey = 8
Voorbeeld van de wouw:
name_lookup("wouw",
datasetKey = "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
limit = 1, higherTaxonKey = 1)$data$scientificName
output: Milvus milvus (Linnaeus, 1758)
name_lookup("wouw",
datasetKey = "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
limit = 1, higherTaxonKey = 6)$data$scientificName
output: Reseda luteola L.
Maar nog eens niet alles verloopt goed. Voorbeeld van de hop:
name_lookup("hop",
datasetKey = "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
limit = 1, higherTaxonKey = 1)$data$scientificName
output: Hypena humili Harris, 1841
name_lookup("hop",
datasetKey = "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
limit = 1, higherTaxonKey = 6)$data$scientificName
output: Chorilaena quercifolia Endl.
maar ik vrees dat iedereen verwachtte Humulus Lupulus L. de "echte" hop, ipv de "wilde hop".
Dit is gewoon door de limit = 1 te verwijzen. Gebruik maar limit = 2 en we krijgen de "juiste" ook erbij:
name_lookup("Hop",
datasetKey = "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
limit = 2, higherTaxonKey = 6)$data$scientificName
output: Chorilaena quercifolia Endl." "Humulus L.
name_lookup("wouw",
datasetKey = "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
limit = 1, higherTaxonKey = 6)$data$scientificName
output: Reseda luteola L.
Maar nog eens niet alles kan altijd goed lopen, bijvoorbeeld van de hop:
name_lookup("hop",
datasetKey = "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
limit = 1, higherTaxonKey = 1)$data$scientificName
output: Hypena humili Harris, 1841
name_lookup("hop",
datasetKey = "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
limit = 1, higherTaxonKey = 6)$data$scientificName
output: Chorilaena quercifolia Endl.
maar ik vrees dat iedereen verwachtte Humulus Lupulus L. de "echte" hop, ipv de "wilde hop".
Dit is gewoon door de limit = 1
te verwijzen. Gebruik maar limit = 2
en we krijgen de "juiste" ook erbij:
name_lookup("Hop",
datasetKey = "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c",
limit = 2, higherTaxonKey = 6)$data$scientificName
output: Chorilaena quercifolia Endl." "Humulus L.
Another interesting remark from @fredericpiesschaert:
één van de problemen is dat er op alle vernacular names onafhankelijk van de taal gecheckt wordt, waardoor je bv bij hop een hoop taxa krijgt die niets te maken hebben met wat we willen krijgen. Als je de taal als parameter kan meegeven zou dat dus ook al veel schelen denk ik
Interesting idea from @ThierryO: