diff --git a/DESCRIPTION b/DESCRIPTION index 8c93fd6d..117b5e2a 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,18 +1,18 @@ Package: AMR -Version: 0.7.1.9038 -Date: 2019-08-12 +Version: 0.7.1.9055 +Date: 2019-08-13 Title: Antimicrobial Resistance Analysis Authors@R: c( person(role = c("aut", "cre"), family = "Berends", given = c("Matthijs", "S."), email = "m.s.berends@umcg.nl", comment = c(ORCID = "0000-0001-7620-1800")), person(role = "aut", family = "Luz", given = c("Christian", "F."), email = "c.f.luz@umcg.nl", comment = c(ORCID = "0000-0001-5809-5995")), - person(role = c("aut", "ths"), - family = "Glasner", given = "Corinna", email = "c.glasner@umcg.nl", comment = c(ORCID = "0000-0003-1241-1328")), person(role = c("aut", "ths"), family = "Friedrich", given = c("Alex", "W."), email = "alex.friedrich@umcg.nl", comment = c(ORCID = "0000-0003-4881-038X")), person(role = c("aut", "ths"), family = "Sinha", given = c("Bhanu", "N.", "M."), email = "b.sinha@umcg.nl", comment = c(ORCID = "0000-0003-1634-0010")), + person(role = c("aut", "ths"), + family = "Glasner", given = "Corinna", email = "c.glasner@umcg.nl", comment = c(ORCID = "0000-0003-1241-1328")), person(role = "ctb", family = "Hassing", given = c("Erwin", "E.", "A."), email = "e.hassing@certe.nl"), person(role = "ctb", diff --git a/NEWS.md b/NEWS.md index 0eaf4c39..d84c3818 100755 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# AMR 0.7.1.9038 +# AMR 0.7.1.9055 ### Breaking * Function `freq()` has moved to a new package, [`clean`](https://github.com/msberends/clean) ([CRAN link](https://cran.r-project.org/package=clean)). Creating frequency tables is actually not the scope of this package (never was) and this function has matured a lot over the last two years. Therefore, a new package was created for data cleaning and checking and it perfectly fits the `freq()` function. The [`clean`](https://github.com/msberends/clean) package is available on CRAN and will be installed automatically when updating the `AMR` package, that now imports it. In a later stage, the `skewness()` and `kurtosis()` functions will be moved to the `clean` package too. @@ -57,12 +57,13 @@ * Removed class `atc` - using `as.atc()` is now deprecated in favour of `ab_atc()` and this will return a character, not the `atc` class anymore * Removed deprecated functions `abname()`, `ab_official()`, `atc_name()`, `atc_official()`, `atc_property()`, `atc_tradenames()`, `atc_trivial_nl()` * Fix and speed improvement for `mo_shortname()` -* Algorithm improvements for `as.mo()`: - * Some misspelled input were not understood +* Algorithm improvements for `as.mo()` (by which some additions were made to the `microorganisms` data set: + * Big improvement for misspelled input * These new trivial names known to the field are now understood: meningococcus, gonococcus, pneumococcus + * Updated to the latest taxonomic data (updated to August 2019, from the International Journal of Systematic and Evolutionary Microbiology + * Added support for Viridans Group Streptococci (VGS) and Milleri Group Streptococci (MGS) + * Added support for 5,000 new fungi * Added support for unknown yeasts and fungi -* Updated the `microorganisms` data set to contain the latest taxonomic data from the IJSEM journal (now up to date until August 2019) -* Added almost 5,000 new fungi to the `microorganisms` data set * Fix for using `mo_*` functions where the coercion uncertainties and failures would not be available through `mo_uncertainties()` and `mo_failures()` anymore * Deprecated the `country` parameter of `mdro()` in favour of the already existing `guideline` parameter to support multiple guidelines within one country * The `name` of `RIF` is now Rifampicin instead of Rifampin @@ -144,7 +145,7 @@ #### Changed * Fixed a critical bug in `first_isolate()` where missing species would lead to incorrect FALSEs. This bug was not present in AMR v0.5.0, but was in v0.6.0 and v0.6.1. -* Fixedd a bug in `eucast_rules()` where antibiotics from WHONET software would not be recognised +* Fixed a bug in `eucast_rules()` where antibiotics from WHONET software would not be recognised * Completely reworked the `antibiotics` data set: * All entries now have 3 different identifiers: * Column `ab` contains a human readable EARS-Net code, used by ECDC and WHO/WHONET - this is the primary identifier used in this package diff --git a/R/catalogue_of_life.R b/R/catalogue_of_life.R index 5c92d9e1..bd5d7f65 100755 --- a/R/catalogue_of_life.R +++ b/R/catalogue_of_life.R @@ -24,9 +24,9 @@ #' This package contains the complete taxonomic tree of almost all microorganisms from the authoritative and comprehensive Catalogue of Life. #' @section Catalogue of Life: #' \if{html}{\figure{logo_col.png}{options: height=40px style=margin-bottom:5px} \cr} -#' This package contains the complete taxonomic tree of almost all microorganisms (~65,000 species) from the authoritative and comprehensive Catalogue of Life (\url{http://www.catalogueoflife.org}). The Catalogue of Life is the most comprehensive and authoritative global index of species currently available. +#' This package contains the complete taxonomic tree of almost all microorganisms (~70,000 species) from the authoritative and comprehensive Catalogue of Life (\url{http://www.catalogueoflife.org}). The Catalogue of Life is the most comprehensive and authoritative global index of species currently available. #' -#' \link[=catalogue_of_life]{Click here} for more information about the included taxa. The Catalogue of Life releases updates annually; check which version was included in this package with \code{\link{catalogue_of_life_version}()}. +#' \link[=catalogue_of_life]{Click here} for more information about the included taxa. Check which version of the Catalogue of Life was included in this package with \code{\link{catalogue_of_life_version}()}. #' @section Included taxa: #' Included are: #' \itemize{ @@ -38,7 +38,7 @@ #' \item{The responsible author(s) and year of scientific publication} #' } #' -#' The Catalogue of Life (\url{http://www.catalogueoflife.org}) is the most comprehensive and authoritative global index of species currently available. It holds essential information on the names, relationships and distributions of over 1.6 million species. The Catalogue of Life is used to support the major biodiversity and conservation information services such as the Global Biodiversity Information Facility (GBIF), Encyclopedia of Life (EoL) and the International Union for Conservation of Nature Red List. It is recognised by the Convention on Biological Diversity as a significant component of the Global Taxonomy Initiative and a contribution to Target 1 of the Global Strategy for Plant Conservation. +#' The Catalogue of Life (\url{http://www.catalogueoflife.org}) is the most comprehensive and authoritative global index of species currently available. It holds essential information on the names, relationships and distributions of over 1.9 million species. The Catalogue of Life is used to support the major biodiversity and conservation information services such as the Global Biodiversity Information Facility (GBIF), Encyclopedia of Life (EoL) and the International Union for Conservation of Nature Red List. It is recognised by the Convention on Biological Diversity as a significant component of the Global Taxonomy Initiative and a contribution to Target 1 of the Global Strategy for Plant Conservation. #' #' The syntax used to transform the original data to a cleansed R format, can be found here: \url{https://gitlab.com/msberends/AMR/blob/master/data-raw/reproduction_of_microorganisms.R}. #' @inheritSection AMR Read more on our website! diff --git a/R/data.R b/R/data.R index b8178772..0a506dd6 100755 --- a/R/data.R +++ b/R/data.R @@ -55,7 +55,7 @@ #' #' A data set containing the microbial taxonomy of six kingdoms from the Catalogue of Life. MO codes can be looked up using \code{\link{as.mo}}. #' @inheritSection catalogue_of_life Catalogue of Life -#' @format A \code{\link{data.frame}} with 69,854 observations and 16 variables: +#' @format A \code{\link{data.frame}} with 69,855 observations and 16 variables: #' \describe{ #' \item{\code{mo}}{ID of microorganism as used by this package} #' \item{\code{col_id}}{Catalogue of Life ID} @@ -64,14 +64,14 @@ #' \item{\code{rank}}{Text of the taxonomic rank of the microorganism, like \code{"species"} or \code{"genus"}} #' \item{\code{ref}}{Author(s) and year of concerning scientific publication} #' \item{\code{species_id}}{ID of the species as used by the Catalogue of Life} -#' \item{\code{source}}{Either \code{"CoL"}, \code{"DSMZ"} (see source) or "manually added"} +#' \item{\code{source}}{Either "CoL", "DSMZ" (see Source) or "manually added"} #' \item{\code{prevalence}}{Prevalence of the microorganism, see \code{?as.mo}} #' } #' @details Manually added were: #' \itemize{ -#' \item{9 entries of \emph{Streptococcus} (beta haemolytic groups A, B, C, D, F, G, H, K and unspecified)} +#' \item{11 entries of \emph{Streptococcus} (beta-haemolytic: groups A, B, C, D, F, G, H, K and unspecified; other: viridans, milleri)} #' \item{2 entries of \emph{Staphylococcus} (coagulase-negative [CoNS] and coagulase-positive [CoPS])} -#' \item{3 entries of Trichomonas (Trichomonas vaginalis, and its family and genus)} +#' \item{3 entries of \emph{Trichomonas} (\emph{Trichomonas vaginalis}, and its family and genus)} #' \item{5 other 'undefined' entries (unknown, unknown Gram negatives, unknown Gram positives, unknown yeast and unknown fungus)} #' \item{8,970 species from the DSMZ (Deutsche Sammlung von Mikroorganismen und Zellkulturen) that are not in the Catalogue of Life} #' } diff --git a/R/mo.R b/R/mo.R index db4445f9..db163435 100755 --- a/R/mo.R +++ b/R/mo.R @@ -29,7 +29,7 @@ #' @param Lancefield a logical to indicate whether beta-haemolytic \emph{Streptococci} should be categorised into Lancefield groups instead of their own species, according to Rebecca C. Lancefield [3]. These \emph{Streptococci} will be categorised in their first group, e.g. \emph{Streptococcus dysgalactiae} will be group C, although officially it was also categorised into groups G and L. #' #' This excludes \emph{Enterococci} at default (who are in group D), use \code{Lancefield = "all"} to also categorise all \emph{Enterococci} as group D. -#' @param allow_uncertain a logical (\code{TRUE} or \code{FALSE}) or a value between 0 and 3 to indicate whether the input should be checked for less possible results, see Details +#' @param allow_uncertain a number between 0 (or "none") and 3 (or "all"), or TRUE (= 2) or FALSE (= 0) to indicate whether the input should be checked for less possible results, see Details #' @param reference_df a \code{data.frame} to use for extra reference when translating \code{x} to a valid \code{mo}. See \code{\link{set_mo_source}} and \code{\link{get_mo_source}} to automate the usage of your own codes (e.g. used in your analysis or organisation). #' @param ... other parameters passed on to functions #' @rdname as.mo @@ -50,8 +50,7 @@ #' | | ----> species, a 3-4 letter acronym #' | ----> genus, a 5-7 letter acronym, mostly without vowels #' ----> taxonomic kingdom: A (Archaea), AN (Animalia), B (Bacteria), -#' C (Chromista), F (Fungi), P (Protozoa) or -#' PL (Plantae) +#' C (Chromista), F (Fungi), P (Protozoa) #' } #' #' Values that cannot be coered will be considered 'unknown' and will get the MO code \code{UNKNOWN}. @@ -60,13 +59,14 @@ #' #' The algorithm uses data from the Catalogue of Life (see below) and from one other source (see \code{?microorganisms}). #' +# /// THIS PART WAS DELETED FROM THE MAN PAGE # \strong{Self-learning algoritm} \cr # The \code{as.mo()} function gains experience from previously determined microbial IDs and learns from it. This drastically improves both speed and reliability. Use \code{clean_mo_history()} to reset the algorithms. Only experience from your current \code{AMR} package version is used. This is done because in the future the taxonomic tree (which is included in this package) may change for any organism and it consequently has to rebuild its knowledge. # # Usually, any guess after the first try runs 80-95\% faster than the first try. # # For now, learning only works per session. If R is closed or terminated, the algorithms reset. This will probably be resolved in a next version. -# +# //// #' \strong{Intelligent rules} \cr #' This function uses intelligent rules to help getting fast and logical results. It tries to find matches in this order: #' \itemize{ @@ -169,7 +169,8 @@ #' #' # All mo_* functions use as.mo() internally too (see ?mo_property): #' mo_genus("E. coli") # returns "Escherichia" -#' mo_gramstain("E. coli") # returns "Gram negative"#' +#' mo_gramstain("E. coli") # returns "Gram negative" +#' #' } #' \dontrun{ #' df$mo <- as.mo(df$microorganism_name) @@ -478,6 +479,7 @@ exec_as.mo <- function(x, x_species <- paste(x, "species") # translate to English for supported languages of mo_property x <- gsub("(gruppe|groep|grupo|gruppo|groupe)", "group", x, ignore.case = TRUE) + x <- gsub("(vergroen)[a-z]*", "viridans", x, ignore.case = TRUE) x <- gsub("(hefe|gist|gisten|levadura|lievito|fermento|levure)[a-z]*", "yeast", x, ignore.case = TRUE) x <- gsub("(schimmels?|mofo|molde|stampo|moisissure|fungi)[a-z]*", "fungus", x, ignore.case = TRUE) x <- gsub("Fungus[ph|f]rya", "Fungiphrya", x, ignore.case = TRUE) @@ -491,13 +493,13 @@ exec_as.mo <- function(x, x <- gsub("(alpha|beta|gamma).?ha?emoly", "\\1-haemoly", x) # remove genus as first word x <- gsub("^Genus ", "", x) - # allow characters that resemble others ---- + # allow characters that resemble others = dyslexia_mode ---- if (dyslexia_mode == TRUE) { x <- tolower(x) x <- gsub("[iy]+", "[iy]+", x) x <- gsub("(c|k|q|qu|s|z|x|ks)+", "(c|k|q|qu|s|z|x|ks)+", x) - x <- gsub("(ph|f|v)+", "(ph|f|v)+", x) - x <- gsub("(th|t)+", "(th|t)+", x) + x <- gsub("(ph|hp|f|v)+", "(ph|hp|f|v)+", x) + x <- gsub("(th|ht|t)+", "(th|ht|t)+", x) x <- gsub("a+", "a+", x) x <- gsub("u+", "u+", x) # allow any ending of -um, -us, -ium, -icum, -ius, -icus, -ica and -a (needs perl for the negative backward lookup): @@ -512,6 +514,10 @@ exec_as.mo <- function(x, x <- gsub("(.)\\1+", "\\1+", x) # allow ending in -en or -us x <- gsub("e\\+n(?![a-z[])", "(e+n|u+(c|k|q|qu|s|z|x|ks)+)", x, ignore.case = TRUE, perl = TRUE) + # if the input is longer than 10 characters, add a [.] between all characters, as some might have forgotten a character + # this will allow "Pasteurella damatis" to be correctly read as "Pasteurella dagmatis". + x[nchar(x_backup_without_spp) > 10] <- gsub("([a-z])([a-z])", "\\1.*\\2", x[nchar(x_backup_without_spp) > 10], ignore.case = TRUE) + x[nchar(x_backup_without_spp) > 10] <- gsub("[+]", "+.*", x[nchar(x_backup_without_spp) > 10]) } x <- strip_whitespace(x) @@ -764,6 +770,27 @@ exec_as.mo <- function(x, } next } + # streptococcal groups: milleri and viridans + if (x_trimmed[i] %like% 'strepto.* milleri' + | x_backup_without_spp[i] %like% 'strepto.* milleri' + | x_backup_without_spp[i] %like% 'mgs[^a-z]?$') { + # Milleri Group Streptococcus (MGS) + x[i] <- microorganismsDT[mo == 'B_STRPT_MIL', ..property][[1]][1L] + if (initial_search == TRUE) { + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + } + next + } + if (x_trimmed[i] %like% 'strepto.* viridans' + | x_backup_without_spp[i] %like% 'strepto.* viridans' + | x_backup_without_spp[i] %like% 'vgs[^a-z]?$') { + # Viridans Group Streptococcus (VGS) + x[i] <- microorganismsDT[mo == 'B_STRPT_VIR', ..property][[1]][1L] + if (initial_search == TRUE) { + set_mo_history(x_backup[i], get_mo_code(x[i], property), 0, force = force_mo_history) + } + next + } if (x_backup_without_spp[i] %like% 'gram[ -]?neg.*' | x_backup_without_spp[i] %like% 'negatie?[vf]' | x_trimmed[i] %like% 'gram[ -]?neg.*') { @@ -1048,6 +1075,7 @@ exec_as.mo <- function(x, return(NA_character_) } + # UNCERTAINTY LEVEL 1 ---- if (uncertainty_level >= 1) { now_checks_for_uncertainty_level <- 1 @@ -1114,6 +1142,7 @@ exec_as.mo <- function(x, } } + # UNCERTAINTY LEVEL 2 ---- if (uncertainty_level >= 2) { now_checks_for_uncertainty_level <- 2 @@ -1172,9 +1201,37 @@ exec_as.mo <- function(x, return(found[1L]) } - # (5a) try to strip off half an element from end and check the remains ---- + # (5) inverse input ---- if (isTRUE(debug)) { - cat("\n[UNCERTAINLY LEVEL 2] (5a) try to strip off half an element from end and check the remains\n") + cat("\n[UNCERTAINLY LEVEL 2] (5) inverse input\n") + } + a.x_backup_inversed <- paste(rev(unlist(strsplit(a.x_backup, split = " "))), collapse = " ") + if (isTRUE(debug)) { + message("Running '", a.x_backup_inversed, "'") + } + # first try without dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_inversed, initial_search = FALSE, dyslexia_mode = FALSE, allow_uncertain = FALSE, debug = debug))) + if (empty_result(found)) { + # then with dyslexia mode + found <- suppressMessages(suppressWarnings(exec_as.mo(a.x_backup_inversed, initial_search = FALSE, dyslexia_mode = TRUE, allow_uncertain = FALSE, debug = debug))) + } + if (!empty_result(found) & nchar(g.x_backup_without_spp) >= 6) { + found_result <- found + found <- microorganismsDT[mo == found, ..property][[1]] + uncertainties <<- rbind(uncertainties, + data.frame(uncertainty = now_checks_for_uncertainty_level, + input = a.x_backup, + fullname = microorganismsDT[mo == found_result[1L], fullname][[1]], + mo = found_result[1L])) + if (initial_search == TRUE) { + set_mo_history(a.x_backup, get_mo_code(found[1L], property), 2, force = force_mo_history) + } + return(found[1L]) + } + + # (6) try to strip off half an element from end and check the remains ---- + if (isTRUE(debug)) { + cat("\n[UNCERTAINLY LEVEL 2] (6) try to strip off half an element from end and check the remains\n") } x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() if (length(x_strip) > 1) { @@ -1209,9 +1266,9 @@ exec_as.mo <- function(x, } } } - # (5b) try to strip off one element from end and check the remains ---- + # (7) try to strip off one element from end and check the remains ---- if (isTRUE(debug)) { - cat("\n[UNCERTAINLY LEVEL 2] (5b) try to strip off one element from end and check the remains\n") + cat("\n[UNCERTAINLY LEVEL 2] (7) try to strip off one element from end and check the remains\n") } if (length(x_strip) > 1) { for (i in 1:(length(x_strip) - 1)) { @@ -1242,9 +1299,9 @@ exec_as.mo <- function(x, } } } - # (5c) check for unknown yeasts/fungi ---- + # (8) check for unknown yeasts/fungi ---- if (isTRUE(debug)) { - cat("\n[UNCERTAINLY LEVEL 2] (5b) check for unknown yeasts/fungi\n") + cat("\n[UNCERTAINLY LEVEL 2] (8) check for unknown yeasts/fungi\n") } if (b.x_trimmed %like% "yeast") { found <- "F_YEAST" @@ -1274,9 +1331,9 @@ exec_as.mo <- function(x, } return(found[1L]) } - # (6) try to strip off one element from start and check the remains (only allow >= 2-part name outcome) ---- + # (9) try to strip off one element from start and check the remains (only allow >= 2-part name outcome) ---- if (isTRUE(debug)) { - cat("\n[UNCERTAINLY LEVEL 2] (6) try to strip off one element from start and check the remains (only allow >= 2-part name outcome)\n") + cat("\n[UNCERTAINLY LEVEL 2] (9) try to strip off one element from start and check the remains (only allow >= 2-part name outcome)\n") } x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() if (length(x_strip) > 1 & nchar(g.x_backup_without_spp) >= 6) { @@ -1311,12 +1368,13 @@ exec_as.mo <- function(x, } } + # UNCERTAINTY LEVEL 3 ---- if (uncertainty_level >= 3) { now_checks_for_uncertainty_level <- 3 - # (7a) try to strip off one element from start and check the remains (any text size) ---- + # (10) try to strip off one element from start and check the remains (any text size) ---- if (isTRUE(debug)) { - cat("\n[UNCERTAINLY LEVEL 3] (7a) try to strip off one element from start and check the remains (any text size)\n") + cat("\n[UNCERTAINLY LEVEL 3] (10) try to strip off one element from start and check the remains (any text size)\n") } x_strip <- a.x_backup %>% strsplit(" ") %>% unlist() if (length(x_strip) > 1 & nchar(g.x_backup_without_spp) >= 6) { @@ -1346,10 +1404,10 @@ exec_as.mo <- function(x, } } } - # (7b) try to strip off one element from end and check the remains (any text size) ---- - # (this is in fact 5b but without nchar limit of >=6) + # (11) try to strip off one element from end and check the remains (any text size) ---- + # (this is in fact 7 but without nchar limit of >=6) if (isTRUE(debug)) { - cat("\n[UNCERTAINLY LEVEL 3] (7b) try to strip off one element from end and check the remains (any text size)\n") + cat("\n[UNCERTAINLY LEVEL 3] (11) try to strip off one element from end and check the remains (any text size)\n") } if (length(x_strip) > 1) { for (i in 1:(length(x_strip) - 1)) { @@ -1379,9 +1437,9 @@ exec_as.mo <- function(x, } } - # (8) part of a name (very unlikely match) ---- + # (12) part of a name (very unlikely match) ---- if (isTRUE(debug)) { - cat("\n[UNCERTAINLY LEVEL 3] (8) part of a name (very unlikely match)\n") + cat("\n[UNCERTAINLY LEVEL 3] (12) part of a name (very unlikely match)\n") } if (isTRUE(debug)) { message("Running '", f.x_withspaces_end_only, "'") @@ -1775,9 +1833,11 @@ translate_allow_uncertain <- function(allow_uncertain) { # default to uncertainty level 2 allow_uncertain <- 2 } else { + allow_uncertain[tolower(allow_uncertain) == "none"] <- 0 + allow_uncertain[tolower(allow_uncertain) == "all"] <- 3 allow_uncertain <- as.integer(allow_uncertain) if (!allow_uncertain %in% c(0:3)) { - stop("`allow_uncertain` must be a number between 0 (none) and 3 (all), or TRUE (= 2) or FALSE (= 0).", call. = FALSE) + stop('`allow_uncertain` must be a number between 0 (or "none") and 3 (or "all"), or TRUE (= 2) or FALSE (= 0).', call. = FALSE) } } allow_uncertain diff --git a/data-raw/reproduction_of_microorganisms.R b/data-raw/reproduction_of_microorganisms.R index fd2b5d39..eee3cdcf 100644 --- a/data-raw/reproduction_of_microorganisms.R +++ b/data-raw/reproduction_of_microorganisms.R @@ -302,6 +302,9 @@ MOs <- MOs %>% # put `mo` in front, followed by the rest select(mo, everything(), -abbr_other, -abbr_genus, -abbr_species, -abbr_subspecies) +# remove empty fullnames +MOs <- MOs %>% filter(fullname != "") + # add non-taxonomic entries MOs <- MOs %>% bind_rows( @@ -483,6 +486,26 @@ MOs <- MOs %>% ref = NA_character_, species_id = "", source = "manually added"), + # Viridans Streptococci + MOs %>% + filter(genus == "Streptococcus", species == "agalactiae") %>% .[1,] %>% + mutate(mo = gsub("AGA", "VIR", mo), + col_id = NA_integer_, + species = "viridans" , + fullname = "Viridans Group Streptococcus (VGS)", + ref = NA_character_, + species_id = "", + source = "manually added"), + # Milleri Streptococci + MOs %>% + filter(genus == "Streptococcus", species == "agalactiae") %>% .[1,] %>% + mutate(mo = gsub("AGA", "MIL", mo), + col_id = NA_integer_, + species = "milleri" , + fullname = "Milleri Group Streptococcus (MGS)", + ref = NA_character_, + species_id = "", + source = "manually added"), # Trichomonas vaginalis is missing, same order as Dientamoeba MOs %>% filter(fullname == "Dientamoeba") %>% @@ -575,7 +598,7 @@ MOs <- MOs %>% )) # arrange -MOs <- MOs %>% arrange(fullname) +MOs <- MOs %>% arrange(genus, species, subspecies) MOs.old <- MOs.old %>% arrange(fullname) # transform diff --git a/data/microorganisms.rda b/data/microorganisms.rda index 871cb79e..afb04778 100755 Binary files a/data/microorganisms.rda and b/data/microorganisms.rda differ diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html index a73981e8..ae2885e7 100644 --- a/docs/LICENSE-text.html +++ b/docs/LICENSE-text.html @@ -78,7 +78,7 @@ AMR (for R) - 0.7.1.9038 + 0.7.1.9055 @@ -513,7 +513,7 @@ END OF TERMS AND CONDITIONS