1
0
mirror of https://github.com/msberends/AMR.git synced 2025-07-09 19:41:49 +02:00

50 Commits

Author SHA1 Message Date
f5dcf0ad58 v1.8.0 as accepted by CRAN 2022-01-07 16:27:13 +01:00
25cef46c59 (v1.8.0) prerelease 1.8.0 2021-12-23 18:56:28 +01:00
3f4ff260d2 unit test 2021-12-23 15:36:54 +01:00
75dac113b6 (v1.7.1.9077) skimr support only for newer R versions 2021-12-23 13:38:25 +01:00
ed22b83c28 fix macOS r-lib/actions unit test 2021-12-22 09:44:10 +01:00
d9274bcd0a (v1.7.1.9075) assignment operator 2021-12-14 22:59:27 +01:00
76dee66852 (v1.7.1.9074) as.mo() improvement, ASCII replacements for unit tests 2021-12-14 22:39:23 +01:00
bd4bb1d72f (v1.7.1.9073) as.rsi() fix for UTIs 2021-12-14 21:47:14 +01:00
5eef01165e (v1.7.1.9072) as.rsi() fix for UTIs 2021-12-14 12:33:29 +01:00
0cbf8f48b6 (v1.7.1.9071) rsi disk fix 2021-12-13 11:57:34 +01:00
578e7dfee9 (v1.7.1.9070) Better WHONET support 2021-12-13 10:18:28 +01:00
f90e27c1b0 (v1.7.1.9069) CLSI 2021 support 2021-12-12 11:36:58 +01:00
1e66a3daf3 (v1.7.1.9068) new logo, unit tests 2021-12-12 11:07:02 +01:00
56f1ce328a (v1.7.1.9067) Support for Swedish and Russian 2021-12-12 09:42:03 +01:00
5b5f70a103 (v1.7.1.9066) mdro EUCAST v3.3 2021-12-11 15:29:30 +01:00
e0a2634f14 (v1.7.1.9065) unit tests 2021-12-11 15:13:44 +01:00
77ba4318ea (v1.7.1.9064) eucast 3.3 for mdro(), major change to repeated calling 2021-12-11 13:41:31 +01:00
e18c49ed93 (v1.7.1.9063) not_intrinsic_resistant 2021-12-09 10:48:25 +01:00
e63defe324 (v1.7.1.9062) website update 2021-12-06 11:12:30 +01:00
1fa3fc6af2 (v1.7.1.9061) bugfix set_ab_names 2021-12-05 23:21:59 +01:00
75965124ef (v1.7.1.9060) bugfix set_ab_names 2021-12-05 23:11:10 +01:00
b747036deb (v1.7.1.9059) bugfix set_ab_names 2021-12-05 22:59:06 +01:00
7965468ccd (v1.7.1.9058) vars selection for set_ab_names() 2021-12-05 22:06:45 +01:00
3abe61fd61 (v1.7.1.9057) NAs in get_episode() 2021-12-02 13:32:14 +01:00
5375f75829 (v1.7.1.9056) unit tests 2021-11-29 11:55:18 +01:00
c8698347cb (v1.7.1.9055) added EUCAST 3.3 and all LPSN records numbers 2021-11-29 10:38:38 +01:00
694cf5ba77 (v1.7.1.9054) mdro() update - fixes #49, first_isolate() speedup 2021-11-28 23:01:26 +01:00
9a2c431e16 (v1.7.1.9053) fortify() methods 2021-11-01 13:51:13 +01:00
91149d6d35 (v1.7.1.9052) eucast-update 2021-10-06 16:22:36 +02:00
37e6e35ec4 (v1.7.1.9051) updated taxonomy, updated git branch name 2021-10-06 13:23:57 +02:00
8f5e5a3fc2 (v1.7.1.9050) fix for as.mo 2021-10-05 14:00:35 +02:00
2bcf28281d (v1.7.1.9049) unit tests 2021-10-05 09:58:08 +02:00
d1b16ce641 (v1.7.1.9048) unit tests 2021-10-04 10:22:10 +02:00
7a0ecd6c3b No vignettes on old R unit tests 2021-10-03 23:49:46 +02:00
9b97233be2 (v1.7.1.9046) unit tests 2021-10-03 13:50:52 +02:00
b0c84cce9c (v1.7.1.9045) unit tests 2021-09-29 20:24:02 +02:00
557ce74fd7 (v1.7.1.9044) unit tests 2021-09-29 20:13:52 +02:00
45f597cac5 (v1.7.1.9043) unit tests 2021-09-29 20:10:44 +02:00
0775802b7f check file 2021-09-29 16:43:05 +02:00
e8d3ce05d7 (v1.7.1.9041) new GH actions, branches rename 2021-09-29 16:36:03 +02:00
93a4734b44 (v1.7.1.9040) Support for Danish 2021-09-29 12:12:35 +02:00
5f433d6e5c (v1.7.1.9039) reinitiate all units tests 2021-09-03 13:08:36 +02:00
81a1a432bd (v1.7.1.9038) dplyr grouping fix on windows? 2021-09-01 16:52:55 +02:00
bcab74fb6d (v1.7.1.9037) dplyr grouping fix on windows? 2021-08-31 17:06:44 +02:00
953dfac9e5 (v1.7.1.9036) dplyr grouping fix on windows? 2021-08-30 16:49:46 +02:00
986bd826ee (v1.7.1.9035) dplyr grouping fix on windows? 2021-08-30 15:43:12 +02:00
af23f91e5c website update 2021-08-30 15:07:18 +02:00
1daa117e9f (v1.7.1.9033) dplyr grouping fix on windows? 2021-08-30 15:01:32 +02:00
6ca6a3f6df (v1.7.1.9032) dplyr grouping fix on windows? 2021-08-30 14:17:27 +02:00
e6ce25162e (v1.7.1.9031) dplyr grouping fix on windows? 2021-08-30 14:07:46 +02:00
386 changed files with 187230 additions and 155375 deletions

View File

@ -32,3 +32,4 @@
^vignettes/resistance_predict.Rmd$
^vignettes/SPSS.Rmd$
^vignettes/WHONET.Rmd$
^logo.svg$

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -23,16 +23,14 @@
# how to conduct AMR data analysis: https://msberends.github.io/AMR/ #
# ==================================================================== #
# This GitHub Actions file runs without ANY dependency, so works on all versions of R since R-3.0.
on:
push:
branches:
- premaster
- master
- development
- main
pull_request:
branches:
- master
- main
schedule:
# run a schedule everyday at 1 AM.
# this is to check that all dependencies are still available (see R/zzz.R)
@ -52,40 +50,37 @@ jobs:
fail-fast: false
matrix:
config:
# these are the developmental version of R - we allow those tests to fail
- {os: macOS-latest, r: 'devel', allowfail: false}
- {os: windows-latest, r: 'devel', allowfail: false}
- {os: ubuntu-20.04, r: 'devel', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
# test all systems against all released versions of R >= 3.0, we support them all!
- {os: macOS-latest, r: 'devel', allowfail: true}
- {os: macOS-latest, r: '4.1', allowfail: false}
- {os: windows-latest, r: '4.1', allowfail: false}
- {os: ubuntu-20.04, r: '4.1', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: macOS-latest, r: '4.0', allowfail: false}
- {os: windows-latest, r: '4.0', allowfail: false}
- {os: ubuntu-20.04, r: '4.0', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: macOS-latest, r: '3.6', allowfail: false}
- {os: windows-latest, r: '3.6', allowfail: false}
- {os: ubuntu-20.04, r: '3.6', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: macOS-latest, r: '3.5', allowfail: false}
- {os: windows-latest, r: '3.5', allowfail: false}
- {os: ubuntu-20.04, r: '3.5', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: macOS-latest, r: '3.4', allowfail: false}
- {os: windows-latest, r: '3.4', allowfail: false}
- {os: ubuntu-20.04, r: '3.4', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: macOS-latest, r: '3.3', allowfail: false}
- {os: windows-latest, r: '3.3', allowfail: false}
- {os: ubuntu-20.04, r: '3.3', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: macOS-latest, r: '3.2', allowfail: false}
- {os: windows-latest, r: '3.2', allowfail: false}
# - {os: macOS-latest, r: '3.1', allowfail: true}
# - {os: macOS-latest, r: '3.0', allowfail: true}
- {os: ubuntu-20.04, r: 'devel', allowfail: true, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: ubuntu-20.04, r: '4.1', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: ubuntu-20.04, r: '4.0', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: ubuntu-20.04, r: '3.6', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: ubuntu-20.04, r: '3.5', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: ubuntu-20.04, r: '3.4', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: ubuntu-20.04, r: '3.3', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: ubuntu-20.04, r: '3.2', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
# - {os: macOS-latest, r: '3.1', allowfail: false}
# - {os: windows-latest, r: '3.1', allowfail: false}
- {os: ubuntu-20.04, r: '3.1', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
# - {os: macOS-latest, r: '3.0', allowfail: false}
# - {os: windows-latest, r: '3.0', allowfail: false}
- {os: ubuntu-20.04, r: '3.0', allowfail: false, rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: windows-latest, r: 'devel', allowfail: true}
- {os: windows-latest, r: '4.1', allowfail: false}
- {os: windows-latest, r: '4.0', allowfail: false}
- {os: windows-latest, r: '3.6', allowfail: false}
- {os: windows-latest, r: '3.5', allowfail: false}
- {os: windows-latest, r: '3.4', allowfail: false}
- {os: windows-latest, r: '3.3', allowfail: false}
# - {os: windows-latest, r: '3.2', allowfail: true}
# - {os: windows-latest, r: '3.1', allowfail: true}
# - {os: windows-latest, r: '3.0', allowfail: true}
env:
R_REMOTES_NO_ERRORS_FROM_WARNINGS: true
RSPM: ${{ matrix.config.rspm }}
@ -94,9 +89,11 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: r-lib/actions/setup-r@v1
- uses: r-lib/actions/setup-r@v2
with:
r-version: ${{ matrix.config.r }}
- uses: r-lib/actions/setup-pandoc@v2
- name: Install Linux dependencies
if: runner.os == 'Linux'
@ -104,20 +101,14 @@ jobs:
# we don't want to depend on the sysreqs pkg here, as it requires quite a recent R version
# as of May 2021: https://sysreqs.r-hub.io/pkg/AMR,R,cleaner,curl,dplyr,ggplot2,ggtext,knitr,microbenchmark,pillar,readxl,rmarkdown,rstudioapi,rvest,skimr,tidyr,tinytest,xml2,backports,crayon,rlang,vctrs,evaluate,highr,markdown,stringr,yaml,xfun,cli,ellipsis,fansi,lifecycle,utf8,glue,mime,magrittr,stringi,generics,R6,tibble,tidyselect,pkgconfig,purrr,digest,gtable,isoband,MASS,mgcv,scales,withr,nlme,Matrix,farver,labeling,munsell,RColorBrewer,viridisLite,lattice,colorspace,gridtext,Rcpp,RCurl,png,jpeg,bitops,cellranger,progress,rematch,hms,prettyunits,htmltools,jsonlite,tinytex,base64enc,httr,selectr,openssl,askpass,sys,repr,cpp11
run: |
sudo apt install -y libssl-dev pandoc pandoc-citeproc libxml2-dev libicu-dev libcurl4-openssl-dev libpng-dev libudunits2-dev
- name: Query dependencies
# this will change every day (i.e. at scheduled night run of GitHub Action), so it will cache dependency updates
run: |
writeLines(paste0(format(Sys.Date(), "%Y%m%d"), sprintf("-R-%i.%i", getRversion()$major, getRversion()$minor)), ".github/daily-R-bundle")
shell: Rscript {0}
sudo apt install -y libssl-dev libxml2-dev libicu-dev libcurl4-openssl-dev libpng-dev
- name: Restore cached R packages
# this step will add the step 'Post Restore cached R packages' on a succesful run
uses: actions/cache@v2
with:
path: ${{ env.R_LIBS_USER }}
key: ${{ matrix.config.os }}-${{ hashFiles('.github/daily-R-bundle') }}-v4
key: ${{ matrix.config.os }}-r-${{ matrix.config.r }}-v4
- name: Unpack AMR and install R dependencies
if: always()
@ -134,10 +125,8 @@ jobs:
as.data.frame(utils::installed.packages())[, "Version", drop = FALSE]
shell: Rscript {0}
# - name: Only keep vignettes on release version
- name: Remove vignettes
# if: matrix.config.r != 'release'
if: always()
- name: Remove vignettes on R without knitr support
if: matrix.config.r == '3.0' || matrix.config.r == '3.1' || matrix.config.r == '3.2'
# writing to DESCRIPTION2 and then moving to DESCRIPTION is required for R < 3.3 as writeLines() cannot overwrite
run: |
rm -rf AMR/vignettes
@ -171,5 +160,5 @@ jobs:
if: always()
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.config.os }}-r-${{ matrix.config.r }}-artifacts
name: artifacts-${{ matrix.config.os }}-r${{ matrix.config.r }}
path: AMR.Rcheck

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -26,11 +26,11 @@
on:
push:
branches:
- premaster
- master
- development
- main
pull_request:
branches:
- master
- main
name: code-coverage
@ -42,11 +42,13 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: r-lib/actions/setup-r@v1
- uses: r-lib/actions/setup-r@v2
with:
r-version: release
- uses: r-lib/actions/setup-pandoc@master
- uses: r-lib/actions/setup-pandoc@v2
# with:
# pandoc-version: '2.7.3' # The pandoc version to download (if necessary) and use.
- name: Query dependencies
# this will change once a week, so it will cache dependency updates

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -26,11 +26,11 @@
on:
push:
branches:
- premaster
- master
- development
- main
pull_request:
branches:
- master
- main
name: lintr
@ -42,7 +42,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: r-lib/actions/setup-r@master
- uses: r-lib/actions/setup-r@v2
- name: Query dependencies
run: |

2
.gitignore vendored
View File

@ -25,3 +25,5 @@ data-raw/taxon.tab
data-raw/DSMZ_bactnames.xlsx
data-raw/country_analysis_url_token.R
data-raw/country_analysis2.R
data-raw/taxonomy.csv
data-raw/WHONET

View File

@ -1,6 +1,6 @@
Package: AMR
Version: 1.7.1.9030
Date: 2021-08-29
Version: 1.8.0
Date: 2022-01-03
Title: Antimicrobial Resistance Data Analysis
Description: Functions to simplify and standardise antimicrobial resistance (AMR)
data analysis and to work with microbial and antimicrobial properties by
@ -10,34 +10,34 @@ Authors@R: c(
person(given = c("Matthijs", "S."),
family = "Berends",
email = "m.s.berends@umcg.nl",
role = c("aut", "cre"),
role = c("aut", "cre"),
comment = c(ORCID = "0000-0001-7620-1800")),
person(given = c("Christian", "F."),
family = "Luz",
role = c("aut", "ctb"),
comment = c(ORCID = "0000-0001-5809-5995")),
person(given = c("Alexander", "W."),
family = "Friedrich",
role = c("aut", "ths"),
comment = c(ORCID = "0000-0003-4881-038X")),
person(given = c("Bhanu", "N.", "M."),
family = "Sinha",
role = c("aut", "ths"),
comment = c(ORCID = "0000-0003-1634-0010")),
person(given = "Dennis",
family = "Souverein",
role = c("aut", "ctb"),
comment = c(ORCID = "0000-0003-0455-0336")),
person(given = c("Erwin", "E.", "A."),
family = "Hassing",
role = c("aut", "ctb")),
person(given = c("Casper", "J."),
family = "Albers",
role = c("aut", "ths"),
role = "ths",
comment = c(ORCID = "0000-0002-9213-6743")),
person(given = "Corinna",
family = "Glasner",
role = c("aut", "ths"),
comment = c(ORCID = "0000-0003-1241-1328")),
person(given = c("Judith", "M."),
family = "Fonville",
role = "ctb"),
person(given = c("Erwin", "E.", "A."),
family = "Hassing",
role = "ctb"),
person(given = c("Alex", "W."),
family = "Friedrich",
role = "ths",
comment = c(ORCID = "0000-0003-4881-038X")),
person(given = "Corinna",
family = "Glasner",
role = "ths",
comment = c(ORCID = "0000-0003-1241-1328")),
person(given = c("Eric", "H.", "L.", "C.", "M."),
family = "Hazenberg",
role = "ctb"),
@ -59,14 +59,14 @@ Authors@R: c(
person(given = c("Rogier", "P."),
family = "Schade",
role = "ctb"),
person(given = "Dennis",
family = "Souverein",
role = "ctb",
comment = c(ORCID = "0000-0003-0455-0336")),
person(given = c("Bhanu", "N.", "M."),
family = "Sinha",
role = "ths",
comment = c(ORCID = "0000-0003-1634-0010")),
person(given = "Anthony",
family = "Underwood",
role = "ctb",
comment = c(ORCID = "0000-0002-8547-427")))
comment = c(ORCID = "0000-0002-8547-4277")))
Depends: R (>= 3.0.0)
Enhances:
cleaner,
@ -77,16 +77,17 @@ Suggests:
dplyr,
ggtext,
knitr,
progress,
readxl,
rmarkdown,
rvest,
tinytest,
xml2
VignetteBuilder: knitr,rmarkdown
URL: https://github.com/msberends/AMR, https://msberends.github.io/AMR
URL: https://msberends.github.io/AMR/, https://github.com/msberends/AMR
BugReports: https://github.com/msberends/AMR/issues
License: GPL-2 | file LICENSE
Encoding: UTF-8
LazyData: true
RoxygenNote: 7.1.1
RoxygenNote: 7.1.2
Roxygen: list(markdown = TRUE)

View File

@ -75,6 +75,7 @@ S3method(c,mic)
S3method(c,mo)
S3method(c,rsi)
S3method(ceiling,mic)
S3method(close,progress_bar)
S3method(cos,mic)
S3method(cosh,mic)
S3method(cospi,mic)
@ -157,6 +158,9 @@ export("%like%")
export("%like_case%")
export("%unlike%")
export("%unlike_case%")
export(NA_disk_)
export(NA_mic_)
export(NA_rsi_)
export(ab_atc)
export(ab_atc_group1)
export(ab_atc_group2)
@ -227,8 +231,8 @@ export(fluoroquinolones)
export(full_join_microorganisms)
export(g.test)
export(geom_rsi)
export(get_AMR_locale)
export(get_episode)
export(get_locale)
export(get_mo_source)
export(ggplot_pca)
export(ggplot_rsi)
@ -270,6 +274,7 @@ export(mo_is_gram_positive)
export(mo_is_intrinsic_resistant)
export(mo_is_yeast)
export(mo_kingdom)
export(mo_lpsn)
export(mo_matching_score)
export(mo_name)
export(mo_order)
@ -290,6 +295,7 @@ export(mo_url)
export(mo_year)
export(mrgn)
export(n_rsi)
export(not_intrinsic_resistant)
export(oxazolidinones)
export(pca)
export(penicillins)

62
NEWS.md
View File

@ -1,15 +1,28 @@
# `AMR` 1.7.1.9030
## <small>Last updated: 29 August 2021</small>
# `AMR` 1.8.0
All functions in this package are now all considered to be stable. Updates to the AMR interpretation rules (such as by EUCAST and CLSI), the microbial taxonomy, and the antibiotic dosages will all be updated every 6 to 12 months from now on.
### Breaking changes
* Removed `p_symbol()` and all `filter_*()` functions (except for `filter_first_isolate()`), which were all deprecated in a previous package version
* Removed the `key_antibiotics()` and `key_antibiotics_equal()` functions, which were deprecated and superseded by `key_antimicrobials()` and `antimicrobials_equal()`
* Removed all previously implemented `ggplot2::ggplot()` generics for classes `<mic>`, `<disk>`, `<rsi>` and `<resistance_predict>` as they did not follow the `ggplot2` logic. They were replaced with `ggplot2::autoplot()` generics.
* Renamed function `get_locale()` to `get_AMR_locale()` to prevent conflicts with other packages
### New
* Function `set_ab_names()` to rename data set columns that resemble antimicrobial drugs. This allows for quickly renaming columns to official names, ATC codes, etc.
* Support for the CLSI 2021 guideline for interpreting MIC/disk diffusion values, which are incorporated in the `rsi_translation` data set. This data set now more strictly follows the WHONET software as well.
* Support for EUCAST Intrinsic Resistance and Unusual Phenotypes v3.3 (October 2021). This is now the default EUCAST guideline in the package (all older guidelines are still available) for `eucast_rules()`, `mo_is_intrinsic_resistant()` and `mdro()`. The `intrinsic_resistant` data set was also updated accordingly.
* Support for all antimicrobial drug (group) names and colloquial microorganism names in Danish, Dutch, English, French, German, Italian, Portuguese, Russian, Spanish and Swedish
* Function `set_ab_names()` to rename data set columns that resemble antimicrobial drugs. This allows for quickly renaming columns to official names, ATC codes, etc. Its second argument can be a tidyverse way of selecting:
```r
example_isolates %>% set_ab_names(where(is.rsi))
example_isolates %>% set_ab_names(AMC:GEN, property = "atc")
```
* Function `mo_lpsn()` to retrieve the [LPSN](https://lpsn.dsmz.de) record ID
* Function `ab_ddd_units()` to get units of DDDs (daily defined doses), deprecating the use of `ab_ddd(..., units = TRUE)` to be more consistent in data types of function output
### Changed
* Updated the bacterial taxonomy to 5 October 2021 (according to [LPSN](https://lpsn.dsmz.de)), including all 11 new staphylococcal species named since 1 January last year
* The `antibiotics` data set now contains **all ATC codes** that are available through the [WHOCC website](https://www.whocc.no), regardless of drugs being present in more than one ATC group. This means that:
* Some drugs now contain multiple ATC codes (e.g., metronidazole contains 5)
* `antibiotics$atc` is now a `list` containing `character` vectors, and this `atc` column was moved to the 5th position of the `antibiotics` data set
@ -29,22 +42,39 @@
example_isolates[, ab_selector(oral_ddd > 1 & oral_units == "g")] # base R
example_isolates %>% select(ab_selector(oral_ddd > 1 & oral_units == "g")) # dplyr
```
* Fix for using selectors multiple times in one call (e.g., using them in `dplyr::filter()` and immediately after in `dplyr::select()`)
* Added the selector `not_intrinsic_resistant()`, which only keeps antibiotic columns that are not intrinsic resistant for all microorganisms in a data set, based on the latest EUCAST guideline on intrinsic resistance. For example, if a data set contains only microorganism codes or names of *E. coli* and *K. pneumoniae* and contains a column "vancomycin", this column will be removed (or rather, unselected) using this function.
* Added argument `only_treatable`, which defaults to `TRUE` and will exclude drugs that are only for laboratory tests and not for treating patients (such as imipenem/EDTA and gentamicin-high)
* Fix for using selectors multiple times in one call (e.g., using them in `dplyr::filter()` and immediately after in `dplyr::select()`)
* Fix for using having multiple columns that are coerced to the same antibiotic agent
* Fixed for using `all()` or `any()` on antibiotic selectors in an R Markdown file
* Added the following antimicrobial agents that are now covered by the WHO: aztreonam/nacubactam (ANC), cefepime/nacubactam (FNC), exebacase (EXE), ozenoxacin (OZN), zoliflodacin (ZFD), manogepix (MGX), ibrexafungerp (IBX), and rezafungin (RZF). None of these agents have an ATC code yet.
* Fixed the Gram stain (`mo_gramstain()`) determination of the taxonomic class Negativicutes within the phylum of Firmicutes - they were considered Gram-positives because of their phylum but are actually Gram-negative. This impacts 137 taxonomic species, genera and families, such as *Negativicoccus* and *Veillonella*.
* Dramatic speed improvement for `first_isolate()`
* Fix to prevent introducing `NA`s for old MO codes when running `as.mo()` on them
* Added more informative error messages when any of the `proportion_*()` and `count_*()` functions fail
* When printing a tibble with any old MO code, a warning will be thrown that old codes should be updated using `as.mo()`
* Improved automatic column selector when `col_*` arguments are left blank, e.g. in `first_isolate()`
* The right input types for `random_mic()`, `random_disk()` and `random_rsi()` are now enforced
* `as.rsi()` can now correct for textual input (such as "Susceptible", "Resistant") in Dutch, English, French, German, Italian, Portuguese and Spanish
* `as.rsi()` has an improved algorithm and can now also correct for textual input (such as "Susceptible", "Resistant") in all supported languages
* `as.mic()` has an improved algorithm
* When warnings are thrown because of too few isolates in any `count_*()`, `proportion_*()` function (or `resistant()` or `susceptible()`), the `dplyr` group will be shown, if available
* Fix for legends created with `scale_rsi_colours()` when using `ggplot2` v3.3.4 or higher (this is ggplot2 bug 4511, soon to be fixed)
* Fix for minor translation errors
* Fix for the MIC interpretation of *Morganellaceae* (such as *Morganella* and *Proteus*) when using the EUCAST 2021 guideline
* Improved algorithm of `as.mo()`
* Improved algorithm for generating random MICs with `random_mic()`
* Improved plot legends for MICs and disk diffusion values
* Improved speed of `as.ab()` and all `ab_*()` functions
* Added `fortify()` extensions for plotting methods
* `NA` values of the classes `<mic>`, `<disk>` and `<rsi>` are now exported objects of this package, e.g. `NA_mic_` is an `NA` of class `mic` (just like the base R `NA_character_` is an `NA` of class `character`)
* The `proportion_df()`, `count_df()` and `rsi_df()` functions now return with the additional S3 class 'rsi_df' so they can be extended by other packages
* The `mdro()` function now returns `NA` for all rows that have no test results
* The `species_id` column in the `microorganisms` data set now only contains LPSN record numbers. For this reason, this column is now numeric instead of a character, and `mo_url()` has been updated to reflect this change.
* Fixed a small bug in the functions `get_episode()` and `is_new_episode()`
* `get_episode()` and `is_new_episode()` can now cope with `NA`s
### Other
* This package is now being maintained by two epidemiologists and a data scientist from two different non-profit healthcare organisations.
# AMR 1.7.1
@ -499,7 +529,7 @@ This software is now out of beta and considered stable. Nonetheless, this packag
### New
* Support for the newest [EUCAST Clinical Breakpoint Tables v.10.0](https://www.eucast.org/clinical_breakpoints/), valid from 1 January 2020. This affects translation of MIC and disk zones using `as.rsi()` and inferred resistance and susceptibility using `eucast_rules()`.
* The repository of this package now contains a clean version of the EUCAST and CLSI guidelines from 2011-2020 to translate MIC and disk diffusion values to R/SI: <https://github.com/msberends/AMR/blob/master/data-raw/rsi_translation.txt>. This **allows for machine reading these guidelines**, which is almost impossible with the Excel and PDF files distributed by EUCAST and CLSI. This file used to process the EUCAST Clinical Breakpoints Excel file [can be found here](https://github.com/msberends/AMR/blob/master/data-raw/read_EUCAST.R).
* The repository of this package now contains a clean version of the EUCAST and CLSI guidelines from 2011-2020 to translate MIC and disk diffusion values to R/SI: <https://github.com/msberends/AMR/blob/main/data-raw/rsi_translation.txt>. This **allows for machine reading these guidelines**, which is almost impossible with the Excel and PDF files distributed by EUCAST and CLSI. This file used to process the EUCAST Clinical Breakpoints Excel file [can be found here](https://github.com/msberends/AMR/blob/main/data-raw/read_EUCAST.R).
* Support for LOINC and SNOMED codes
* Support for LOINC codes in the `antibiotics` data set. Use `ab_loinc()` to retrieve LOINC codes, or use a LOINC code for input in any `ab_*` function:
```r
@ -702,7 +732,7 @@ This software is now out of beta and considered stable. Nonetheless, this packag
* Added support for *Blastocystis*
* Added support for 5,000 new fungi
* Added support for unknown yeasts and fungi
* Changed most microorganism IDs to improve readability. For example, the old code `B_ENTRC_FAE` could have been both *E. faecalis* and *E. faecium*. Its new code is `B_ENTRC_FCLS` and *E. faecium* has become `B_ENTRC_FACM`. Also, the Latin character æ (ae) is now preserved at the start of each genus and species abbreviation. For example, the old code for *Aerococcus urinae* was `B_ARCCC_NAE`. This is now `B_AERCC_URIN`.
* Changed most microorganism IDs to improve readability. For example, the old code `B_ENTRC_FAE` could have been both *E. faecalis* and *E. faecium*. Its new code is `B_ENTRC_FCLS` and *E. faecium* has become `B_ENTRC_FACM`. Also, the Latin character ae is now preserved at the start of each genus and species abbreviation. For example, the old code for *Aerococcus urinae* was `B_ARCCC_NAE`. This is now `B_AERCC_URIN`.
**IMPORTANT:** Old microorganism IDs are still supported, but support will be dropped in a future version. Use `as.mo()` on your old codes to transform them to the new format. Using functions from the `mo_*` family (like `mo_name()` and `mo_gramstain()`) on old codes, will throw a warning.
* More intelligent guessing for `as.ab()`, including bidirectional language support
* Added support for the German national guideline (3MRGN/4MRGN) in the `mdro()` function, to determine multi-drug resistant organisms
@ -760,7 +790,7 @@ This software is now out of beta and considered stable. Nonetheless, this packag
* EIEC (Entero-Invasive *E. coli*)
* EPEC (Entero-Pathogenic *E. coli*)
* ETEC (Entero-Toxigenic *E. coli*)
* NMEC (Neonatal Meningitiscausing *E. coli*)
* NMEC (Neonatal Meningitis-causing *E. coli*)
* STEC (Shiga-toxin producing *E. coli*)
* UPEC (Uropathogenic *E. coli*)
@ -816,7 +846,7 @@ This software is now out of beta and considered stable. Nonetheless, this packag
* All references to antibiotics in our package now use EARS-Net codes, like `AMX` for amoxicillin
* Functions `atc_certe`, `ab_umcg` and `atc_trivial_nl` have been removed
* All `atc_*` functions are superseded by `ab_*` functions
* All output will be translated by using an included translation file which [can be viewed here](https://github.com/msberends/AMR/blob/master/data-raw/translations.tsv)
* All output will be translated by using an included translation file which [can be viewed here](https://github.com/msberends/AMR/blob/main/data-raw/translations.tsv)
* Improvements to plotting AMR results with `ggplot_rsi()`:
* New argument `colours` to set the bar colours
* New arguments `title`, `subtitle`, `caption`, `x.title` and `y.title` to set titles and axis descriptions
@ -840,7 +870,7 @@ This software is now out of beta and considered stable. Nonetheless, this packag
freq(age) %>%
boxplot()
```
* Removed all hardcoded EUCAST rules and replaced them with a new reference file which [can be viewed here](https://github.com/msberends/AMR/blob/master/data-raw/eucast_rules.tsv)
* Removed all hardcoded EUCAST rules and replaced them with a new reference file which [can be viewed here](https://github.com/msberends/AMR/blob/main/data-raw/eucast_rules.tsv)
* Added ceftazidim intrinsic resistance to *Streptococci*
* Changed default settings for `age_groups()`, to let groups of fives and tens end with 100+ instead of 120+
* Fix for `freq()` for when all values are `NA`
@ -986,13 +1016,7 @@ We've got a new website: [https://msberends.gitlab.io/AMR](https://msberends.git
Using `as.mo(..., allow_uncertain = 3)` could lead to very unreliable results.
* Implemented the latest publication of Becker *et al.* (2019), for categorising coagulase-negative *Staphylococci*
* All microbial IDs that found are now saved to a local file `~/.Rhistory_mo`. Use the new function `clean_mo_history()` to delete this file, which resets the algorithms.
* Incoercible results will now be considered 'unknown', MO code `UNKNOWN`. On foreign systems, properties of these will be translated to all languages already previously supported: German, Dutch, French, Italian, Spanish and Portuguese:
```r
mo_genus("qwerty", language = "es")
# Warning:
# one unique value (^= 100.0%) could not be coerced and is considered 'unknown': "qwerty". Use mo_failures() to review it.
#> [1] "(género desconocido)"
```
* Incoercible results will now be considered 'unknown', MO code `UNKNOWN`. On foreign systems, properties of these will be translated to all languages already previously supported: German, Dutch, French, Italian, Spanish and Portuguese.
* Fix for vector containing only empty values
* Finds better results when input is in other languages
* Better handling for subspecies
@ -1268,7 +1292,7 @@ We've got a new website: [https://msberends.gitlab.io/AMR](https://msberends.git
* New Becker classification for *Staphylococcus* to categorise them into Coagulase Negative *Staphylococci* (CoNS) and Coagulase Positve *Staphylococci* (CoPS)
* New Lancefield classification for *Streptococcus* to categorise them into Lancefield groups
* For convience, new descriptive statistical functions `kurtosis` and `skewness` that are lacking in base R - they are generic functions and have support for vectors, data.frames and matrices
* Function `g.test` to perform the Χ<sup>2</sup> distributed [*G*-test](https://en.wikipedia.org/wiki/G-test), which use is the same as `chisq.test`
* Function `g.test` to perform the X<sup>2</sup> distributed [*G*-test](https://en.wikipedia.org/wiki/G-test), which use is the same as `chisq.test`
* ~~Function `ratio` to transform a vector of values to a preset ratio~~
* ~~For example: `ratio(c(10, 500, 10), ratio = "1:2:1")` would return `130, 260, 130`~~
* Support for Addins menu in RStudio to quickly insert `%in%` or `%like%` (and give them keyboard shortcuts), or to view the datasets that come with this package
@ -1351,7 +1375,7 @@ We've got a new website: [https://msberends.gitlab.io/AMR](https://msberends.git
* Added [ORCID](https://orcid.org) of authors to DESCRIPTION file
* Added unit testing with the `testthat` package
* Added build tests for Linux and macOS using Travis CI (https://travis-ci.org/msberends/AMR)
* Added line coverage checking using CodeCov (https://codecov.io/gh/msberends/AMR/tree/master/R)
* Added line coverage checking using CodeCov (https://codecov.io/gh/msberends/AMR/tree/main/R)
# AMR 0.1.1

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -40,6 +40,10 @@ EUCAST_VERSION_EXPERT_RULES <- list("3.1" = list(version_txt = "v3.1",
"3.2" = list(version_txt = "v3.2",
year = 2020,
title = "'EUCAST Expert Rules' and 'EUCAST Intrinsic Resistance and Unusual Phenotypes'",
url = "https://www.eucast.org/expert_rules_and_intrinsic_resistance/"),
"3.3" = list(version_txt = "v3.3",
year = 2021,
title = "'EUCAST Expert Rules' and 'EUCAST Intrinsic Resistance and Unusual Phenotypes'",
url = "https://www.eucast.org/expert_rules_and_intrinsic_resistance/"))
SNOMED_VERSION <- list(title = "Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS)",
@ -52,9 +56,9 @@ SNOMED_VERSION <- list(title = "Public Health Information Network Vocabulary Acc
CATALOGUE_OF_LIFE <- list(
year = 2019,
version = "Catalogue of Life: {year} Annual Checklist",
url_CoL = "http://www.catalogueoflife.org/col/",
url_CoL = "http://www.catalogueoflife.org",
url_LPSN = "https://lpsn.dsmz.de",
yearmonth_LPSN = "March 2021"
yearmonth_LPSN = "5 October 2021"
)
globalVariables(c(".rowid",
@ -105,6 +109,7 @@ globalVariables(c(".rowid",
"old_name",
"pattern",
"R",
"rank_index",
"reference.rule",
"reference.rule_group",
"reference.version",

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -53,15 +53,87 @@ pm_left_join <- function(x, y, by = NULL, suffix = c(".x", ".y")) {
merged
}
quick_case_when <- function(...) {
vectors <- list(...)
split <- lapply(vectors, function(x) unlist(strsplit(paste(deparse(x), collapse = ""), "~", fixed = TRUE)))
for (i in seq_len(length(vectors))) {
if (eval(parse(text = split[[i]][1]), envir = parent.frame())) {
return(eval(parse(text = split[[i]][2]), envir = parent.frame()))
# support where() like tidyverse:
# adapted from https://github.com/nathaneastwood/poorman/blob/52eb6947e0b4430cd588976ed8820013eddf955f/R/where.R#L17-L32
where <- function(fn) {
if (!is.function(fn)) {
stop(pm_deparse_var(fn), " is not a valid predicate function.")
}
preds <- unlist(lapply(
pm_select_env$.data,
function(x, fn) {
do.call("fn", list(x))
},
fn
))
if (!is.logical(preds)) stop("`where()` must be used with functions that return `TRUE` or `FALSE`.")
data_cols <- pm_select_env$get_colnames()
cols <- data_cols[preds]
which(data_cols %in% cols)
}
# copied and slightly rewritten from poorman under same license (2021-10-15)
quick_case_when <- function (...) {
fs <- list(...)
lapply(fs, function(x) if (class(x) != "formula")
stop("`case_when()` requires formula inputs."))
n <- length(fs)
if (n == 0L)
stop("No cases provided.")
validate_case_when_length <- function (query, value, fs) {
lhs_lengths <- lengths(query)
rhs_lengths <- lengths(value)
all_lengths <- unique(c(lhs_lengths, rhs_lengths))
if (length(all_lengths) <= 1L)
return(all_lengths[[1L]])
non_atomic_lengths <- all_lengths[all_lengths != 1L]
len <- non_atomic_lengths[[1L]]
if (length(non_atomic_lengths) == 1L)
return(len)
inconsistent_lengths <- non_atomic_lengths[-1L]
lhs_problems <- lhs_lengths %in% inconsistent_lengths
rhs_problems <- rhs_lengths %in% inconsistent_lengths
problems <- lhs_problems | rhs_problems
if (any(problems)) {
stop("The following formulas must be length ", len, " or 1, not ",
paste(inconsistent_lengths, collapse = ", "), ".\n ",
paste(fs[problems], collapse = "\n "),
call. = FALSE)
}
}
return(NA)
replace_with <- function (x, i, val, arg_name) {
if (is.null(val))
return(x)
i[is.na(i)] <- FALSE
if (length(val) == 1L) {
x[i] <- val
}
else {
x[i] <- val[i]
}
x
}
query <- vector("list", n)
value <- vector("list", n)
default_env <- parent.frame()
for (i in seq_len(n)) {
query[[i]] <- eval(fs[[i]][[2]], envir = default_env)
value[[i]] <- eval(fs[[i]][[3]], envir = default_env)
if (!is.logical(query[[i]]))
stop(fs[[i]][[2]], " does not return a `logical` vector.")
}
m <- validate_case_when_length(query, value, fs)
out <- value[[1]][rep(NA_integer_, m)]
replaced <- rep(FALSE, m)
for (i in seq_len(n)) {
out <- replace_with(out, query[[i]] & !replaced, value[[i]],
NULL)
replaced <- replaced | (query[[i]] & !is.na(query[[i]]))
}
out
}
# No export, no Rd
@ -122,14 +194,14 @@ check_dataset_integrity <- function() {
data_in_globalenv <- ls(envir = globalenv())
overwritten <- data_in_pkg[data_in_pkg %in% data_in_globalenv]
# exception for example_isolates
overwritten <- overwritten[overwritten != "example_isolates"]
overwritten <- overwritten[overwritten %unlike% "example_isolates"]
if (length(overwritten) > 0) {
if (length(overwritten) > 1) {
plural <- c("s are", "", "s")
} else {
plural <- c(" is", "s", "")
}
if (message_not_thrown_before("dataset_overwritten")) {
if (message_not_thrown_before("check_dataset_integrity", overwritten)) {
warning_("The following data set", plural[1],
" overwritten by your global environment and prevent", plural[2],
" the AMR package from working correctly: ",
@ -251,7 +323,7 @@ search_type_in_df <- function(x, type, info = TRUE) {
found <- found[1]
if (!is.null(found) & info == TRUE) {
if (message_not_thrown_before(fn = paste0("search_", type))) {
if (message_not_thrown_before("search_in_type", type)) {
msg <- paste0("Using column '", font_bold(found), "' as input for `col_", type, "`.")
if (type %in% c("keyantibiotics", "keyantimicrobials", "specimen")) {
msg <- paste(msg, "Use", font_bold(paste0("col_", type), "= FALSE"), "to prevent this.")
@ -296,12 +368,15 @@ stop_ifnot_installed <- function(package) {
return(invisible())
}
pkg_is_available <- function(pkg, also_load = TRUE) {
pkg_is_available <- function(pkg, also_load = TRUE, min_version = NULL) {
if (also_load == TRUE) {
out <- suppressWarnings(require(pkg, character.only = TRUE, warn.conflicts = FALSE, quietly = TRUE))
out <- suppressWarnings(require(pkg, character.only = TRUE, warn.conflicts = FALSE))
} else {
out <- requireNamespace(pkg, quietly = TRUE)
}
if (!is.null(min_version)) {
out <- out && utils::packageVersion(pkg) >= min_version
}
isTRUE(out)
}
@ -729,14 +804,17 @@ meet_criteria <- function(object,
}
get_current_data <- function(arg_name, call) {
valid_df <- function(x) {
!is.null(x) && is.data.frame(x)
}
# try dplyr::cur_data_all() first to support dplyr groups
# only useful for e.g. dplyr::filter(), dplyr::mutate() and dplyr::summarise()
# not useful (throws error) with e.g. dplyr::select() - but that will be caught later in this function
cur_data_all <- import_fn("cur_data_all", "dplyr", error_on_fail = FALSE)
if (!is.null(cur_data_all)) {
out <- tryCatch(cur_data_all(), error = function(e) NULL)
if (is.data.frame(out)) {
return(structure(out, type = "dplyr_cur_data_all"))
if (valid_df(out)) {
return(out)
}
}
@ -745,18 +823,18 @@ get_current_data <- function(arg_name, call) {
if (!is.null(env$`.Generic`)) {
# don't check `".Generic" %in% names(env)`, because in R < 3.2, `names(env)` is always NULL
if (!is.null(env$`.data`) && is.data.frame(env$`.data`)) {
if (valid_df(env$`.data`)) {
# an element `.data` will be in the environment when using `dplyr::select()`
# (but not when using `dplyr::filter()`, `dplyr::mutate()` or `dplyr::summarise()`)
return(structure(env$`.data`, type = "dplyr_selector"))
return(env$`.data`)
} else if (!is.null(env$xx) && is.data.frame(env$xx)) {
} else if (valid_df(env$xx)) {
# an element `xx` will be in the environment for rows + cols, e.g. `example_isolates[c(1:3), carbapenems()]`
return(structure(env$xx, type = "base_R"))
return(env$xx)
} else if (!is.null(env$x) && is.data.frame(env$x)) {
} else if (valid_df(env$x)) {
# an element `x` will be in the environment for only cols, e.g. `example_isolates[, carbapenems()]`
return(structure(env$x, type = "base_R"))
return(env$x)
}
}
}
@ -826,32 +904,44 @@ is_null_or_grouped_tbl <- function(x) {
is.null(x) || inherits(x, "grouped_df")
}
unique_call_id <- function(entire_session = FALSE) {
unique_call_id <- function(entire_session = FALSE, match_fn = NULL) {
if (entire_session == TRUE) {
c(envir = "session",
call = "session")
} else {
# combination of environment ID (such as "0x7fed4ee8c848")
# and highest system call
call <- paste0(deparse(sys.calls()[[1]]), collapse = "")
if (!interactive() || call %like% "run_test_dir|test_all|tinytest|test_package|testthat") {
# unit tests will keep the same call and environment - give them a unique ID
call <- paste0(sample(c(c(0:9), letters[1:6]), size = 64, replace = TRUE), collapse = "")
}
c(envir = gsub("<environment: (.*)>", "\\1", utils::capture.output(sys.frames()[[1]])),
call = call)
return(c(envir = "session", call = "session"))
}
# combination of environment ID (such as "0x7fed4ee8c848")
# and relevant system call (where 'match_fn' is being called in)
calls <- sys.calls()
if (!identical(Sys.getenv("R_RUN_TINYTEST"), "true") &&
!any(as.character(calls[[1]]) %like_case% "run_test_dir|run_test_file|test_all|tinytest|test_package|testthat")) {
for (i in seq_len(length(calls))) {
call_clean <- gsub("[^a-zA-Z0-9_().-]", "", as.character(calls[[i]]), perl = TRUE)
if (any(call_clean %like% paste0(match_fn, "\\("), na.rm = TRUE)) {
return(c(envir = gsub("<environment: (.*)>", "\\1", utils::capture.output(sys.frames()[[1]]), perl = TRUE),
call = paste0(deparse(calls[[i]]), collapse = "")))
}
}
}
c(envir = paste0(sample(c(c(0:9), letters[1:6]), size = 32, replace = TRUE), collapse = ""),
call = paste0(sample(c(c(0:9), letters[1:6]), size = 32, replace = TRUE), collapse = ""))
}
message_not_thrown_before <- function(fn, entire_session = FALSE) {
#' @noRd
#' @param fn name of the function as a character
#' @param ... character elements to be pasted together as a 'salt'
#' @param entire_session show message once per session
message_not_thrown_before <- function(fn, ..., entire_session = FALSE) {
# this is to prevent that messages/notes will be printed for every dplyr group or more than once per session
# e.g. this would show a msg 4 times: example_isolates %>% group_by(hospital_id) %>% filter(mo_is_gram_negative())
not_thrown_before <- is.null(pkg_env[[paste0("thrown_msg.", fn)]]) || !identical(pkg_env[[paste0("thrown_msg.", fn)]],
unique_call_id(entire_session = entire_session))
salt <- gsub("[^a-zA-Z0-9|_-]", "?", paste(c(...), sep = "|", collapse = "|"), perl = TRUE)
not_thrown_before <- is.null(pkg_env[[paste0("thrown_msg.", fn, ".", salt)]]) ||
!identical(pkg_env[[paste0("thrown_msg.", fn, ".", salt)]],
unique_call_id(entire_session = entire_session,
match_fn = fn))
if (isTRUE(not_thrown_before)) {
# message was not thrown before - remember this so on the next run it will return FALSE:
assign(x = paste0("thrown_msg.", fn),
value = unique_call_id(entire_session = entire_session),
assign(x = paste0("thrown_msg.", fn, ".", salt),
value = unique_call_id(entire_session = entire_session, match_fn = fn),
envir = pkg_env)
}
not_thrown_before
@ -1006,14 +1096,30 @@ progress_ticker <- function(n = 1, n_min = 0, print = TRUE, ...) {
}
set_clean_class(pb, new_class = "txtProgressBar")
} else if (n >= n_min) {
pb <- utils::txtProgressBar(max = n, style = 3)
pb$tick <- function() {
pb$up(pb$getVal() + 1)
# rely on the progress package if it is available - it has a more verbose output
progress_bar <- import_fn("progress_bar", "progress", error_on_fail = FALSE)
if (!is.null(progress_bar)) {
# so we use progress::progress_bar
# a close() method was also added, see below this function
pb <- progress_bar$new(format = "[:bar] :percent (:current/:total)",
total = n)
} else {
pb <- utils::txtProgressBar(max = n, style = 3)
pb$tick <- function() {
pb$up(pb$getVal() + 1)
}
}
pb
}
}
#' @method close progress_bar
#' @export
#' @noRd
close.progress_bar <- function(con, ...) {
con$terminate()
}
set_clean_class <- function(x, new_class) {
# return the object with only the new class and no additional attributes where possible
if (is.null(x)) {

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

29
R/ab.R
View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -48,8 +48,6 @@
#' @section Source:
#' World Health Organization (WHO) Collaborating Centre for Drug Statistics Methodology: \url{https://www.whocc.no/atc_ddd_index/}
#'
#' WHONET 2019 software: \url{http://www.whonet.org/software.html}
#'
#' European Commission Public Health PHARMACEUTICALS - COMMUNITY REGISTER: \url{https://ec.europa.eu/health/documents/community-register/html/reg_hum_atc.htm}
#' @aliases ab
#' @return A [character] [vector] with additional class [`ab`]
@ -118,7 +116,9 @@ as.ab <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) {
# remove diacritics
x <- iconv(x, from = "UTF-8", to = "ASCII//TRANSLIT")
x <- gsub('"', "", x, fixed = TRUE)
x <- gsub("(specimen|specimen date|specimen_date|spec_date|^dates?$)", "", x, ignore.case = TRUE, perl = TRUE)
x <- gsub("(specimen|specimen date|specimen_date|spec_date|gender|^dates?$)", "", x, ignore.case = TRUE, perl = TRUE)
# penicillin is a special case: we call it so, but then mean benzylpenicillin
x[x %like_case% "^PENICILLIN" & x %unlike_case% "[ /+-]"] <- "benzylpenicillin"
x_bak_clean <- x
if (already_regex == FALSE) {
x_bak_clean <- generalise_antibiotic_name(x_bak_clean)
@ -131,8 +131,8 @@ as.ab <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) {
note_if_more_than_one_found <- function(found, index, from_text) {
if (initial_search == TRUE & isTRUE(length(from_text) > 1)) {
abnames <- ab_name(from_text, tolower = TRUE, initial_search = FALSE)
if (ab_name(found[1L], language = NULL) %like% "clavulanic acid") {
abnames <- abnames[!abnames == "clavulanic acid"]
if (ab_name(found[1L], language = NULL) %like% "(clavulanic acid|avibactam)") {
abnames <- abnames[!abnames %in% c("clavulanic acid", "avibactam")]
}
if (length(abnames) > 1) {
message_("More than one result was found for item ", index, ": ",
@ -153,7 +153,7 @@ as.ab <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) {
x[known_codes_atc],
function(x_) which(vapply(FUN.VALUE = logical(1),
AB_lookup$atc,
function(atc) x_ %in% atc)),
function(atc) x_ %in% atc))[1L],
USE.NAMES = FALSE)]
x_new[known_codes_cid] <- AB_lookup$ab[match(x[known_codes_cid], AB_lookup$cid)]
already_known <- known_names | known_codes_ab | known_codes_atc | known_codes_cid
@ -220,6 +220,16 @@ as.ab <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) {
next
}
# length of input is quite long, and Levenshtein distance is only max 2
if (nchar(x[i]) >= 10) {
levenshtein <- as.double(utils::adist(x[i], AB_lookup$generalised_name))
if (any(levenshtein <= 2)) {
found <- AB_lookup$ab[which(levenshtein <= 2)]
x_new[i] <- note_if_more_than_one_found(found, i, from_text)
next
}
}
# allow characters that resemble others, but only continue when having more than 3 characters
if (nchar(x[i]) <= 3) {
x_unknown <- c(x_unknown, x_bak[x[i] == x_bak_clean][1])
@ -227,6 +237,7 @@ as.ab <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) {
}
x_spelling <- x[i]
if (already_regex == FALSE) {
x_spelling <- gsub("[IY]+", "[IY]+", x_spelling, perl = TRUE)
x_spelling <- gsub("(C|K|Q|QU|S|Z|X|KS)+", "(C|K|Q|QU|S|Z|X|KS)+", x_spelling, perl = TRUE)
x_spelling <- gsub("(PH|F|V)+", "(PH|F|V)+", x_spelling, perl = TRUE)
@ -235,7 +246,7 @@ as.ab <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) {
x_spelling <- gsub("E+", "E+", x_spelling, perl = TRUE)
x_spelling <- gsub("O+", "O+", x_spelling, perl = TRUE)
# allow any ending of -in/-ine and -im/-ime
x_spelling <- gsub("(\\[IY\\]\\+(N|M)|\\[IY\\]\\+(N|M)E\\+)$", "[IY]+(N|M)E*", x_spelling, perl = TRUE)
x_spelling <- gsub("(\\[IY\\]\\+(N|M)|\\[IY\\]\\+(N|M)E\\+?)$", "[IY]+(N|M)E*", x_spelling, perl = TRUE)
# allow any ending of -ol/-ole
x_spelling <- gsub("(O\\+L|O\\+LE\\+)$", "O+LE*", x_spelling, perl = TRUE)
# allow any ending of -on/-one
@ -443,7 +454,7 @@ as.ab <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) {
# take failed ATC codes apart from rest
x_unknown_ATCs <- x_unknown[x_unknown %like% "[A-Z][0-9][0-9][A-Z][A-Z][0-9][0-9]"]
x_unknown <- x_unknown[!x_unknown %in% x_unknown_ATCs]
if (length(x_unknown_ATCs) > 0) {
if (length(x_unknown_ATCs) > 0 & fast_mode == FALSE) {
warning_("These ATC codes are not (yet) in the antibiotics data set: ",
vector_and(x_unknown_ATCs), ".",
call = FALSE)

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -30,11 +30,11 @@
#' @param x any (vector of) text that can be coerced to a valid antibiotic code with [as.ab()]
#' @param tolower a [logical] to indicate whether the first [character] of every output should be transformed to a lower case [character]. This will lead to e.g. "polymyxin B" and not "polymyxin b".
#' @param property one of the column names of one of the [antibiotics] data set: `vector_or(colnames(antibiotics), sort = FALSE)`.
#' @param language language of the returned text, defaults to system language (see [get_locale()]) and can also be set with `getOption("AMR_locale")`. Use `language = NULL` or `language = ""` to prevent translation.
#' @param language language of the returned text, defaults to system language (see [get_AMR_locale()]) and can also be set with `getOption("AMR_locale")`. Use `language = NULL` or `language = ""` to prevent translation.
#' @param administration way of administration, either `"oral"` or `"iv"`
#' @param open browse the URL using [utils::browseURL()]
#' @param ... other arguments passed on to [as.ab()]
#' @param data a [data.frame] of which the columns need to be renamed
#' @param ... in case of [set_ab_names()] and `data` is a [data.frame]: variables to select (supports tidy selection such as `column1:column4`), otherwise other arguments passed on to [as.ab()]
#' @param data a [data.frame] of which the columns need to be renamed, or a [character] vector of column names
#' @param snake_case a [logical] to indicate whether the names should be in so-called [snake case](https://en.wikipedia.org/wiki/Snake_case): in lower case and all spaces/slashes replaced with an underscore (`_`)
#' @param only_first a [logical] to indicate whether only the first ATC code must be returned, with giving preference to J0-codes (i.e., the antimicrobial drug group)
#' @details All output [will be translated][translate] where possible.
@ -97,16 +97,30 @@
#' # use set_ab_names() for renaming columns
#' colnames(example_isolates)
#' colnames(set_ab_names(example_isolates))
#' colnames(set_ab_names(example_isolates, NIT:VAN))
#' \donttest{
#' if (require("dplyr")) {
#' example_isolates %>%
#' set_ab_names()
#'
#' # this does the same:
#' example_isolates %>%
#' rename_with(set_ab_names)
#'
#' # set_ab_names() works with any AB property:
#' example_isolates %>%
#' set_ab_names("atc")
#' set_ab_names(property = "atc")
#'
#' example_isolates %>%
#' set_ab_names(where(is.rsi)) %>%
#' colnames()
#'
#' example_isolates %>%
#' set_ab_names(NIT:VAN) %>%
#' colnames()
#' }
#' }
ab_name <- function(x, language = get_locale(), tolower = FALSE, ...) {
ab_name <- function(x, language = get_AMR_locale(), tolower = FALSE, ...) {
meet_criteria(x, allow_NA = TRUE)
meet_criteria(language, has_length = 1, is_in = c(LANGUAGES_SUPPORTED, ""), allow_NULL = TRUE, allow_NA = TRUE)
meet_criteria(tolower, allow_class = "logical", has_length = 1)
@ -120,68 +134,6 @@ ab_name <- function(x, language = get_locale(), tolower = FALSE, ...) {
x
}
#' @rdname ab_property
#' @aliases ATC
#' @export
set_ab_names <- function(data, property = "name", language = get_locale(), snake_case = property == "name") {
meet_criteria(data, allow_class = "data.frame")
meet_criteria(property, is_in = colnames(antibiotics), has_length = 1, ignore.case = TRUE)
meet_criteria(language, has_length = 1, is_in = c(LANGUAGES_SUPPORTED, ""), allow_NULL = TRUE, allow_NA = TRUE)
meet_criteria(snake_case, allow_class = "logical", has_length = 1)
x_deparsed <- deparse(substitute(data))
if (length(x_deparsed) > 1 || any(x_deparsed %unlike% "[a-z]+")) {
x_deparsed <- "your_data"
}
property <- tolower(property)
columns <- get_column_abx(data, info = FALSE, only_rsi_columns = FALSE, sort = FALSE)
if (length(columns) == 0) {
message_("No columns with antibiotic results found for `set_ab_names()`, leaving names unchanged.")
return(data)
}
x <- vapply(FUN.VALUE = character(1),
ab_property(columns, property = property, language = language),
function(x) {
if (property == "atc") {
# try to get the J-group
if (any(x %like% "^J")) {
x[x %like% "^J"][1L]
} else {
as.character(x[1L])
}
} else {
as.character(x[1L])
}
})
if (any(x %in% c("", NA))) {
warning_("No ", property, " found for column(s): ", vector_and(columns[x %in% c("", NA)], sort = FALSE), call = FALSE)
x[x %in% c("", NA)] <- columns[x %in% c("", NA)]
}
if (snake_case == TRUE) {
x <- tolower(gsub("[^a-zA-Z0-9]+", "_", x))
}
if (any(duplicated(x))) {
# very hacky way of adding the index to each duplicate
# so "Amoxicillin", "Amoxicillin", "Amoxicillin"
# will be "Amoxicillin", "Amoxicillin_2", "Amoxicillin_3"
invisible(lapply(unique(x),
function(u) {
dups <- which(x == u)
if (length(dups) > 1) {
# there are duplicates
dup_add_int <- dups[2:length(dups)]
x[dup_add_int] <<- paste0(x[dup_add_int], "_", c(2:length(dups)))
}
}))
}
colnames(data)[colnames(data) %in% columns] <- x
data
}
#' @rdname ab_property
#' @export
ab_cid <- function(x, ...) {
@ -211,7 +163,7 @@ ab_tradenames <- function(x, ...) {
#' @rdname ab_property
#' @export
ab_group <- function(x, language = get_locale(), ...) {
ab_group <- function(x, language = get_AMR_locale(), ...) {
meet_criteria(x, allow_NA = TRUE)
meet_criteria(language, has_length = 1, is_in = c(LANGUAGES_SUPPORTED, ""), allow_NULL = TRUE, allow_NA = TRUE)
translate_AMR(ab_validate(x = x, property = "group", ...), language = language, only_affect_ab_names = TRUE)
@ -249,7 +201,7 @@ ab_atc <- function(x, only_first = FALSE, ...) {
#' @rdname ab_property
#' @export
ab_atc_group1 <- function(x, language = get_locale(), ...) {
ab_atc_group1 <- function(x, language = get_AMR_locale(), ...) {
meet_criteria(x, allow_NA = TRUE)
meet_criteria(language, has_length = 1, is_in = c(LANGUAGES_SUPPORTED, ""), allow_NULL = TRUE, allow_NA = TRUE)
translate_AMR(ab_validate(x = x, property = "atc_group1", ...), language = language, only_affect_ab_names = TRUE)
@ -257,7 +209,7 @@ ab_atc_group1 <- function(x, language = get_locale(), ...) {
#' @rdname ab_property
#' @export
ab_atc_group2 <- function(x, language = get_locale(), ...) {
ab_atc_group2 <- function(x, language = get_AMR_locale(), ...) {
meet_criteria(x, allow_NA = TRUE)
meet_criteria(language, has_length = 1, is_in = c(LANGUAGES_SUPPORTED, ""), allow_NULL = TRUE, allow_NA = TRUE)
translate_AMR(ab_validate(x = x, property = "atc_group2", ...), language = language, only_affect_ab_names = TRUE)
@ -324,7 +276,7 @@ ab_ddd_units <- function(x, administration = "oral", ...) {
#' @rdname ab_property
#' @export
ab_info <- function(x, language = get_locale(), ...) {
ab_info <- function(x, language = get_AMR_locale(), ...) {
meet_criteria(x, allow_NA = TRUE)
meet_criteria(language, has_length = 1, is_in = c(LANGUAGES_SUPPORTED, ""), allow_NULL = TRUE, allow_NA = TRUE)
@ -375,13 +327,95 @@ ab_url <- function(x, open = FALSE, ...) {
#' @rdname ab_property
#' @export
ab_property <- function(x, property = "name", language = get_locale(), ...) {
ab_property <- function(x, property = "name", language = get_AMR_locale(), ...) {
meet_criteria(x, allow_NA = TRUE)
meet_criteria(property, is_in = colnames(antibiotics), has_length = 1)
meet_criteria(language, is_in = c(LANGUAGES_SUPPORTED, ""), has_length = 1, allow_NULL = TRUE, allow_NA = TRUE)
translate_AMR(ab_validate(x = x, property = property, ...), language = language)
}
#' @rdname ab_property
#' @aliases ATC
#' @export
set_ab_names <- function(data, ..., property = "name", language = get_AMR_locale(), snake_case = NULL) {
meet_criteria(data, allow_class = c("data.frame", "character"))
meet_criteria(property, is_in = colnames(antibiotics), has_length = 1, ignore.case = TRUE)
meet_criteria(language, has_length = 1, is_in = c(LANGUAGES_SUPPORTED, ""), allow_NULL = TRUE, allow_NA = TRUE)
meet_criteria(snake_case, allow_class = "logical", has_length = 1, allow_NULL = TRUE)
x_deparsed <- deparse(substitute(data))
if (length(x_deparsed) > 1 || any(x_deparsed %unlike% "[a-z]+")) {
x_deparsed <- "your_data"
}
property <- tolower(property)
if (is.null(snake_case)) {
snake_case <- property == "name"
}
if (is.data.frame(data)) {
if (tryCatch(length(list(...)) > 0, error = function(e) TRUE)) {
df <- pm_select(data, ...)
} else {
df <- data
}
vars <- get_column_abx(df, info = FALSE, only_rsi_columns = FALSE, sort = FALSE, fn = "set_ab_names")
if (length(vars) == 0) {
message_("No columns with antibiotic results found for `set_ab_names()`, leaving names unchanged.")
return(data)
}
} else {
# quickly get antibiotic codes
vars_ab <- as.ab(data, fast_mode = TRUE)
vars <- data[!is.na(vars_ab)]
}
x <- vapply(FUN.VALUE = character(1),
ab_property(vars, property = property, language = language),
function(x) {
if (property == "atc") {
# try to get the J-group
if (any(x %like% "^J")) {
x[x %like% "^J"][1L]
} else {
as.character(x[1L])
}
} else {
as.character(x[1L])
}
},
USE.NAMES = FALSE)
if (any(x %in% c("", NA))) {
warning_("No ", property, " found for column(s): ", vector_and(vars[x %in% c("", NA)], sort = FALSE), call = FALSE)
x[x %in% c("", NA)] <- vars[x %in% c("", NA)]
}
if (snake_case == TRUE) {
x <- tolower(gsub("[^a-zA-Z0-9]+", "_", x))
}
if (any(duplicated(x))) {
# very hacky way of adding the index to each duplicate
# so "Amoxicillin", "Amoxicillin", "Amoxicillin"
# will be "Amoxicillin", "Amoxicillin_2", "Amoxicillin_3"
invisible(lapply(unique(x),
function(u) {
dups <- which(x == u)
if (length(dups) > 1) {
# there are duplicates
dup_add_int <- dups[2:length(dups)]
x[dup_add_int] <<- paste0(x[dup_add_int], "_", c(2:length(dups)))
}
}))
}
if (is.data.frame(data)) {
colnames(data)[colnames(data) %in% vars] <- x
data
} else {
data[which(!is.na(vars_ab))] <- x
data
}
}
ab_validate <- function(x, property, ...) {
check_dataset_integrity()

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -38,11 +38,6 @@
#' All columns in the data in which these functions are called will be searched for known antibiotic names, abbreviations, brand names, and codes (ATC, EARS-Net, WHO, etc.) according to the [antibiotics] data set. This means that a selector such as [aminoglycosides()] will pick up column names like 'gen', 'genta', 'J01GB03', 'tobra', 'Tobracin', etc.
#'
#' The [ab_class()] function can be used to filter/select on a manually defined antibiotic class. It searches for results in the [antibiotics] data set within the columns `group`, `atc_group1` and `atc_group2`.
#'
#' The [ab_selector()] function can be used to internally filter the [antibiotics] data set on any results, see *Examples*. It allows for filtering on a (part of) a certain name, and/or a group name or even a minimum of DDDs for oral treatment. This function yields the highest flexibility, but is also the least user-friendly, since it requires a hard-coded filter to set.
#'
#' The [administrable_per_os()] and [administrable_iv()] functions also rely on the [antibiotics] data set - antibiotic columns will be matched where a DDD (defined daily dose) for resp. oral and IV treatment is available in the [antibiotics] data set.
#'
#' @section Full list of supported (antibiotic) classes:
#'
#' `r paste0(" * ", na.omit(sapply(DEFINED_AB_GROUPS, function(ab) ifelse(tolower(gsub("^AB_", "", ab)) %in% ls(envir = asNamespace("AMR")), paste0("[", tolower(gsub("^AB_", "", ab)), "()] can select: \\cr ", vector_and(paste0(ab_name(eval(parse(text = ab), envir = asNamespace("AMR")), language = NULL, tolower = TRUE), " (", eval(parse(text = ab), envir = asNamespace("AMR")), ")"), quotes = FALSE, sort = TRUE)), character(0)), USE.NAMES = FALSE)), "\n", collapse = "")`
@ -105,6 +100,12 @@
#' # You can combine selectors with '&' to be more specific:
#' example_isolates %>%
#' select(penicillins() & administrable_per_os())
#'
#' # get AMR for only drugs that matter - no intrinsic resistance:
#' example_isolates %>%
#' filter(mo_genus() %in% c("Escherichia", "Klebsiella")) %>%
#' group_by(hospital_id) %>%
#' summarise(across(not_intrinsic_resistant(), resistance))
#'
#' # get susceptibility for antibiotics whose name contains "trim":
#' example_isolates %>%
@ -167,6 +168,7 @@ ab_class <- function(ab_class,
}
#' @rdname antibiotic_class_selectors
#' @details The [ab_selector()] function can be used to internally filter the [antibiotics] data set on any results, see *Examples*. It allows for filtering on a (part of) a certain name, and/or a group name or even a minimum of DDDs for oral treatment. This function yields the highest flexibility, but is also the least user-friendly, since it requires a hard-coded filter to set.
#' @export
ab_selector <- function(filter,
only_rsi_columns = FALSE,
@ -179,7 +181,8 @@ ab_selector <- function(filter,
# but it only takes a couple of milliseconds
vars_df <- get_current_data(arg_name = NA, call = -2)
# to improve speed, get_column_abx() will only run once when e.g. in a select or group call
ab_in_data <- get_column_abx(vars_df, info = FALSE, only_rsi_columns = only_rsi_columns, sort = FALSE)
ab_in_data <- get_column_abx(vars_df, info = FALSE, only_rsi_columns = only_rsi_columns,
sort = FALSE, fn = "ab_selector")
call <- substitute(filter)
agents <- tryCatch(AMR::antibiotics[which(eval(call, envir = AMR::antibiotics)), "ab", drop = TRUE],
error = function(e) stop_(e$message, call = -5))
@ -193,90 +196,6 @@ ab_selector <- function(filter,
class = c("ab_selector", "character"))
}
#' @rdname antibiotic_class_selectors
#' @export
administrable_per_os <- function(only_rsi_columns = FALSE, ...) {
meet_criteria(only_rsi_columns, allow_class = "logical", has_length = 1)
# get_current_data() has to run each time, for cases where e.g., filter() and select() are used in same call
# but it only takes a couple of milliseconds
vars_df <- get_current_data(arg_name = NA, call = -2)
# to improve speed, get_column_abx() will only run once when e.g. in a select or group call
ab_in_data <- get_column_abx(vars_df, info = FALSE, only_rsi_columns = only_rsi_columns, sort = FALSE)
agents_all <- antibiotics[which(!is.na(antibiotics$oral_ddd)), "ab", drop = TRUE]
agents <- antibiotics[which(antibiotics$ab %in% ab_in_data & !is.na(antibiotics$oral_ddd)), "ab", drop = TRUE]
agents <- ab_in_data[ab_in_data %in% agents]
message_agent_names(function_name = "administrable_per_os",
agents = agents,
ab_group = "administrable_per_os",
examples = paste0(" (such as ",
vector_or(ab_name(sample(agents_all,
size = min(5, length(agents_all)),
replace = FALSE),
tolower = TRUE,
language = NULL),
quotes = FALSE),
")"))
structure(unname(agents),
class = c("ab_selector", "character"))
}
#' @rdname antibiotic_class_selectors
#' @export
administrable_iv <- function(only_rsi_columns = FALSE, ...) {
meet_criteria(only_rsi_columns, allow_class = "logical", has_length = 1)
# get_current_data() has to run each time, for cases where e.g., filter() and select() are used in same call
# but it only takes a couple of milliseconds
vars_df <- get_current_data(arg_name = NA, call = -2)
# to improve speed, get_column_abx() will only run once when e.g. in a select or group call
ab_in_data <- get_column_abx(vars_df, info = FALSE, only_rsi_columns = only_rsi_columns, sort = FALSE)
agents_all <- antibiotics[which(!is.na(antibiotics$iv_ddd)), "ab", drop = TRUE]
agents <- antibiotics[which(antibiotics$ab %in% ab_in_data & !is.na(antibiotics$iv_ddd)), "ab", drop = TRUE]
agents <- ab_in_data[ab_in_data %in% agents]
message_agent_names(function_name = "administrable_iv",
agents = agents,
ab_group = "administrable_iv",
examples = "")
structure(unname(agents),
class = c("ab_selector", "character"))
}
# nolint start
# #' @rdname antibiotic_class_selectors
# #' @export
# not_intrinsic_resistant <- function(mo, ..., only_rsi_columns = FALSE, ...) {
# meet_criteria(mo, allow_class = c("mo", "data.frame", "list", "character", "numeric", "integer", "factor"), has_length = 1, allow_NA = FALSE)
# meet_criteria(only_rsi_columns, allow_class = "logical", has_length = 1)
#
# x <- as.mo(mo, ...)
# wont_work <- intrinsic_resistant[which(intrinsic_resistant$microorganism == mo_name(x, language = NULL)),
# "antibiotic",
# drop = TRUE]
#
# # get_current_data() has to run each time, for cases where e.g., filter() and select() are used in same call
# # but it only takes a couple of milliseconds
# vars_df <- get_current_data(arg_name = NA, call = -2)
# # to improve speed, get_column_abx() will only run once when e.g. in a select or group call
# ab_in_data <- get_column_abx(vars_df, info = FALSE, only_rsi_columns = only_rsi_columns, sort = FALSE)
#
# agents <- ab_in_data[!names(ab_in_data) %in% as.character(as.ab(wont_work))]
#
# # show used version number once per session (pkg_env will reload every session)
# if (message_not_thrown_before("intrinsic_resistant_version.ab", entire_session = TRUE)) {
# message_("Determining intrinsic resistance based on ",
# format_eucast_version_nr(3.2, markdown = FALSE), ". ",
# font_red("This note will be shown once per session."))
# }
#
# message_agent_names(function_name = "not_intrinsic_resistant",
# agents = ab_in_data,
# ab_group = NULL,
# examples = "",
# call = mo_name(x, language = NULL))
#
# agents
# }
# nolint end
#' @rdname antibiotic_class_selectors
#' @export
aminoglycosides <- function(only_rsi_columns = FALSE, only_treatable = TRUE, ...) {
@ -456,6 +375,97 @@ ureidopenicillins <- function(only_rsi_columns = FALSE, ...) {
ab_select_exec("ureidopenicillins", only_rsi_columns = only_rsi_columns)
}
#' @rdname antibiotic_class_selectors
#' @details The [administrable_per_os()] and [administrable_iv()] functions also rely on the [antibiotics] data set - antibiotic columns will be matched where a DDD (defined daily dose) for resp. oral and IV treatment is available in the [antibiotics] data set.
#' @export
administrable_per_os <- function(only_rsi_columns = FALSE, ...) {
meet_criteria(only_rsi_columns, allow_class = "logical", has_length = 1)
# get_current_data() has to run each time, for cases where e.g., filter() and select() are used in same call
# but it only takes a couple of milliseconds
vars_df <- get_current_data(arg_name = NA, call = -2)
# to improve speed, get_column_abx() will only run once when e.g. in a select or group call
ab_in_data <- get_column_abx(vars_df, info = FALSE, only_rsi_columns = only_rsi_columns,
sort = FALSE, fn = "administrable_per_os")
agents_all <- antibiotics[which(!is.na(antibiotics$oral_ddd)), "ab", drop = TRUE]
agents <- antibiotics[which(antibiotics$ab %in% ab_in_data & !is.na(antibiotics$oral_ddd)), "ab", drop = TRUE]
agents <- ab_in_data[ab_in_data %in% agents]
message_agent_names(function_name = "administrable_per_os",
agents = agents,
ab_group = "administrable_per_os",
examples = paste0(" (such as ",
vector_or(ab_name(sample(agents_all,
size = min(5, length(agents_all)),
replace = FALSE),
tolower = TRUE,
language = NULL),
quotes = FALSE),
")"))
structure(unname(agents),
class = c("ab_selector", "character"))
}
#' @rdname antibiotic_class_selectors
#' @export
administrable_iv <- function(only_rsi_columns = FALSE, ...) {
meet_criteria(only_rsi_columns, allow_class = "logical", has_length = 1)
# get_current_data() has to run each time, for cases where e.g., filter() and select() are used in same call
# but it only takes a couple of milliseconds
vars_df <- get_current_data(arg_name = NA, call = -2)
# to improve speed, get_column_abx() will only run once when e.g. in a select or group call
ab_in_data <- get_column_abx(vars_df, info = FALSE, only_rsi_columns = only_rsi_columns,
sort = FALSE, fn = "administrable_iv")
agents_all <- antibiotics[which(!is.na(antibiotics$iv_ddd)), "ab", drop = TRUE]
agents <- antibiotics[which(antibiotics$ab %in% ab_in_data & !is.na(antibiotics$iv_ddd)), "ab", drop = TRUE]
agents <- ab_in_data[ab_in_data %in% agents]
message_agent_names(function_name = "administrable_iv",
agents = agents,
ab_group = "administrable_iv",
examples = "")
structure(unname(agents),
class = c("ab_selector", "character"))
}
#' @rdname antibiotic_class_selectors
#' @inheritParams eucast_rules
#' @details The [not_intrinsic_resistant()] function can be used to only select antibiotic columns that pose no intrinsic resistance for the microorganisms in the data set. For example, if a data set contains only microorganism codes or names of *E. coli* and *K. pneumoniae* and contains a column "vancomycin", this column will be removed (or rather, unselected) using this function. It currently applies `r format_eucast_version_nr(names(EUCAST_VERSION_EXPERT_RULES[length(EUCAST_VERSION_EXPERT_RULES)]))` to determine intrinsic resistance, using the [eucast_rules()] function internally. Because of this determination, this function is quite slow in terms of performance.
#' @export
not_intrinsic_resistant <- function(only_rsi_columns = FALSE, col_mo = NULL, version_expertrules = 3.3, ...) {
meet_criteria(only_rsi_columns, allow_class = "logical", has_length = 1)
# get_current_data() has to run each time, for cases where e.g., filter() and select() are used in same call
# but it only takes a couple of milliseconds
vars_df <- get_current_data(arg_name = NA, call = -2)
# to improve speed, get_column_abx() will only run once when e.g. in a select or group call
ab_in_data <- get_column_abx(vars_df, info = FALSE, only_rsi_columns = only_rsi_columns,
sort = FALSE, fn = "not_intrinsic_resistant")
# intrinsic vars
vars_df_R <- tryCatch(sapply(eucast_rules(vars_df,
col_mo = col_mo,
version_expertrules = version_expertrules,
rules = "expert",
info = FALSE),
function(col) tryCatch(!any(is.na(col)) && all(col == "R"),
error = function(e) FALSE)),
error = function(e) stop_("in not_intrinsic_resistant(): ", e$message, call = FALSE))
agents <- ab_in_data[ab_in_data %in% names(vars_df_R[which(vars_df_R)])]
if (length(agents) > 0 &&
message_not_thrown_before("not_intrinsic_resistant", sort(agents))) {
agents_formatted <- paste0("'", font_bold(agents, collapse = NULL), "'")
agents_names <- ab_name(names(agents), tolower = TRUE, language = NULL)
need_name <- generalise_antibiotic_name(agents) != generalise_antibiotic_name(agents_names)
agents_formatted[need_name] <- paste0(agents_formatted[need_name], " (", agents_names[need_name], ")")
message_("For `not_intrinsic_resistant()` removing ",
ifelse(length(agents) == 1, "column ", "columns "),
vector_and(agents_formatted, quotes = FALSE, sort = FALSE))
}
vars_df_R <- names(vars_df_R)[which(!vars_df_R)]
# find columns that are abx, but also intrinsic R
out <- unname(intersect(ab_in_data, vars_df_R))
structure(out,
class = c("ab_selector", "character"))
}
ab_select_exec <- function(function_name,
only_rsi_columns = FALSE,
only_treatable = FALSE,
@ -464,22 +474,24 @@ ab_select_exec <- function(function_name,
# but it only takes a couple of milliseconds
vars_df <- get_current_data(arg_name = NA, call = -3)
# to improve speed, get_column_abx() will only run once when e.g. in a select or group call
ab_in_data <- get_column_abx(vars_df, info = FALSE, only_rsi_columns = only_rsi_columns, sort = FALSE)
ab_in_data <- get_column_abx(vars_df, info = FALSE, only_rsi_columns = only_rsi_columns,
sort = FALSE, fn = function_name)
# untreatable drugs
untreatable <- antibiotics[which(antibiotics$name %like% "-high|EDTA|polysorbate"), "ab", drop = TRUE]
if (only_treatable == TRUE & any(untreatable %in% names(ab_in_data))) {
if (message_not_thrown_before(paste0("ab_class.untreatable.", function_name), entire_session = TRUE)) {
warning_("Some agents in `", function_name, "()` were ignored since they cannot be used for treating patients: ",
vector_and(ab_name(names(ab_in_data)[names(ab_in_data) %in% untreatable],
language = NULL,
tolower = TRUE),
quotes = FALSE,
sort = TRUE), ". They can be included using `", function_name, "(only_treatable = FALSE)`. ",
"This warning will be shown once per session.",
call = FALSE)
if (only_treatable == TRUE) {
untreatable <- antibiotics[which(antibiotics$name %like% "-high|EDTA|polysorbate|macromethod|screening|/nacubactam"), "ab", drop = TRUE]
if (any(untreatable %in% names(ab_in_data))) {
if (message_not_thrown_before(function_name, "ab_class", "untreatable", entire_session = TRUE)) {
warning_("Some agents in `", function_name, "()` were ignored since they cannot be used for treating patients: ",
vector_and(ab_name(names(ab_in_data)[names(ab_in_data) %in% untreatable],
language = NULL,
tolower = TRUE),
quotes = FALSE,
sort = TRUE), ". They can be included using `", function_name, "(only_treatable = FALSE)`. ",
"This warning will be shown once per session.",
call = FALSE)
}
ab_in_data <- ab_in_data[!names(ab_in_data) %in% untreatable]
}
ab_in_data <- ab_in_data[!names(ab_in_data) %in% untreatable]
}
if (length(ab_in_data) == 0) {
@ -661,14 +673,14 @@ any.ab_selector_any_all <- function(..., na.rm = FALSE) {
}
is_any <- function(el1) {
syscall <- paste0(trimws(deparse(sys.calls()[[1]])), collapse = " ")
syscalls <- paste0(trimws(deparse(sys.calls())), collapse = " ")
el1 <- gsub("(.*),.*", "\\1", el1)
syscall %like% paste0("[^_a-zA-Z0-9]any\\(", "(c\\()?", el1)
syscalls %like% paste0("[^_a-zA-Z0-9]any\\(", "(c\\()?", el1)
}
is_all <- function(el1) {
syscall <- paste0(trimws(deparse(sys.calls()[[1]])), collapse = " ")
syscalls <- paste0(trimws(deparse(sys.calls())), collapse = " ")
el1 <- gsub("(.*),.*", "\\1", el1)
syscall %like% paste0("[^_a-zA-Z0-9]all\\(", "(c\\()?", el1)
syscalls %like% paste0("[^_a-zA-Z0-9]all\\(", "(c\\()?", el1)
}
find_ab_group <- function(ab_class_args) {
@ -709,7 +721,7 @@ find_ab_names <- function(ab_group, n = 3) {
}
message_agent_names <- function(function_name, agents, ab_group = NULL, examples = "", ab_class_args = NULL, call = NULL) {
if (message_not_thrown_before(paste0(function_name, ".", paste(sort(agents), collapse = "|")))) {
if (message_not_thrown_before(function_name, sort(agents))) {
if (length(agents) == 0) {
if (is.null(ab_group)) {
message_("For `", function_name, "()` no antimicrobial agents found", examples, ".")

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -138,15 +138,21 @@ atc_online_property <- function(atc_code,
atc_url <- sub("%s", atc_code[i], atc_url, fixed = TRUE)
if (property == "groups") {
tbl <- read_html(atc_url) %pm>%
html_node("#content") %pm>%
html_children() %pm>%
html_node("a")
out <- tryCatch(
read_html(atc_url) %pm>%
html_node("#content") %pm>%
html_children() %pm>%
html_node("a"),
error = function(e) NULL)
if (is.null(out)) {
message_("Connection to ", atc_url, " failed.")
return(rep(NA, length(atc_code)))
}
# get URLS of items
hrefs <- tbl %pm>% html_attr("href")
hrefs <- out %pm>% html_attr("href")
# get text of items
texts <- tbl %pm>% html_text()
texts <- out %pm>% html_text()
# select only text items where URL like "code="
texts <- texts[grepl("?code=", tolower(hrefs), fixed = TRUE)]
# last one is antibiotics, skip it
@ -154,15 +160,21 @@ atc_online_property <- function(atc_code,
returnvalue <- c(list(texts), returnvalue)
} else {
tbl <- read_html(atc_url) %pm>%
html_nodes("table") %pm>%
html_table(header = TRUE) %pm>%
as.data.frame(stringsAsFactors = FALSE)
out <- tryCatch(
read_html(atc_url) %pm>%
html_nodes("table") %pm>%
html_table(header = TRUE) %pm>%
as.data.frame(stringsAsFactors = FALSE),
error = function(e) NULL)
if (is.null(out)) {
message_("Connection to ", atc_url, " failed.")
return(rep(NA, length(atc_code)))
}
# case insensitive column names
colnames(tbl) <- gsub("^atc.*", "atc", tolower(colnames(tbl)))
colnames(out) <- gsub("^atc.*", "atc", tolower(colnames(out)))
if (length(tbl) == 0) {
if (length(out) == 0) {
warning_("ATC not found: ", atc_code[i], ". Please check ", atc_url, ".", call = FALSE)
returnvalue[i] <- NA
next
@ -170,15 +182,15 @@ atc_online_property <- function(atc_code,
if (property %in% c("atc", "name")) {
# ATC and name are only in first row
returnvalue[i] <- tbl[1, property]
returnvalue[i] <- out[1, property]
} else {
if (!"adm.r" %in% colnames(tbl) | is.na(tbl[1, "adm.r"])) {
if (!"adm.r" %in% colnames(out) | is.na(out[1, "adm.r"])) {
returnvalue[i] <- NA
next
} else {
for (j in seq_len(nrow(tbl))) {
if (tbl[j, "adm.r"] == administration) {
returnvalue[i] <- tbl[j, property]
for (j in seq_len(nrow(out))) {
if (out[j, "adm.r"] == administration) {
returnvalue[i] <- out[j, property]
}
}
}

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -162,7 +162,7 @@ bug_drug_combinations <- function(x,
#' @rdname bug_drug_combinations
format.bug_drug_combinations <- function(x,
translate_ab = "name (ab, atc)",
language = get_locale(),
language = get_AMR_locale(),
minimum = 30,
combine_SI = TRUE,
combine_IR = FALSE,

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -41,7 +41,7 @@ format_included_data_number <- function(data) {
#' The Catalogue of Life
#'
#' This package contains the complete taxonomic tree of almost all microorganisms from the authoritative and comprehensive Catalogue of Life.
#' This package contains the complete taxonomic tree (last updated: `r CATALOGUE_OF_LIFE$yearmonth_LPSN`) of almost all microorganisms from the authoritative and comprehensive Catalogue of Life (CoL), supplemented with data from the List of Prokaryotic names with Standing in Nomenclature (LPSN).
#' @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 (`r format_included_data_number(microorganisms)` species) from the authoritative and comprehensive Catalogue of Life (CoL, <http://www.catalogueoflife.org>). The CoL is the most comprehensive and authoritative global index of species currently available. Nonetheless, we supplemented the CoL data with data from the List of Prokaryotic names with Standing in Nomenclature (LPSN, [lpsn.dsmz.de](https://lpsn.dsmz.de)). This supplementation is needed until the [CoL+ project](https://github.com/CatalogueOfLife/general) is finished, which we await.
@ -58,7 +58,7 @@ format_included_data_number <- function(data) {
#'
#' The Catalogue of Life (<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: <https://github.com/msberends/AMR/blob/master/data-raw/reproduction_of_microorganisms.R>.
#' The syntax used to transform the original data to a cleansed \R format, can be found here: <https://github.com/msberends/AMR/blob/main/data-raw/reproduction_of_microorganisms.R>.
#' @inheritSection AMR Read more on Our Website!
#' @name catalogue_of_life
#' @rdname catalogue_of_life
@ -141,5 +141,5 @@ print.catalogue_of_life_version <- function(x, ...) {
" Number of included bacterial species: ", format(x$LPSN$n, big.mark = ","), "\n\n",
"=> Total number of species included: ", format(x$total_included$n_total_species, big.mark = ","), "\n",
"=> Total number of synonyms included: ", format(x$total_included$n_total_synonyms, big.mark = ","), "\n\n",
"See for more info ?microorganisms and ?catalogue_of_life.\n"))
"See for more info ", font_grey_bg("`?microorganisms`"), " and ", font_grey_bg("`?catalogue_of_life`"), ".\n"))
}

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -213,7 +213,7 @@ n_rsi <- count_all
#' @export
count_df <- function(data,
translate_ab = "name",
language = get_locale(),
language = get_AMR_locale(),
combine_SI = TRUE,
combine_IR = FALSE) {
tryCatch(

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -26,7 +26,7 @@
#' Define Custom EUCAST Rules
#'
#' Define custom EUCAST rules for your organisation or specific analysis and use the output of this function in [eucast_rules()].
#' @inheritSection lifecycle Maturing Lifecycle
#' @inheritSection lifecycle Stable Lifecycle
#' @param ... rules in formula notation, see *Examples*
#' @details
#' Some organisations have their own adoption of EUCAST rules. This function can be used to define custom EUCAST rules to be used in the [eucast_rules()] function.

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -60,17 +60,15 @@
#' ## Direct download
#' These data sets are available as 'flat files' for use even without \R - you can find the files here:
#'
#' * <https://github.com/msberends/AMR/raw/master/data-raw/antibiotics.txt>
#' * <https://github.com/msberends/AMR/raw/master/data-raw/antivirals.txt>
#' * <https://github.com/msberends/AMR/raw/main/data-raw/antibiotics.txt>
#' * <https://github.com/msberends/AMR/raw/main/data-raw/antivirals.txt>
#'
#' Files in \R format (with preserved data structure) can be found here:
#'
#' * <https://github.com/msberends/AMR/raw/master/data/antibiotics.rda>
#' * <https://github.com/msberends/AMR/raw/master/data/antivirals.rda>
#' * <https://github.com/msberends/AMR/raw/main/data/antibiotics.rda>
#' * <https://github.com/msberends/AMR/raw/main/data/antivirals.rda>
#' @source World Health Organization (WHO) Collaborating Centre for Drug Statistics Methodology (WHOCC): <https://www.whocc.no/atc_ddd_index/>
#'
#' WHONET 2019 software: <http://www.whonet.org/software.html>
#'
#' European Commission Public Health PHARMACEUTICALS - COMMUNITY REGISTER: <https://ec.europa.eu/health/documents/community-register/html/reg_hum_atc.htm>
#' @inheritSection AMR Reference Data Publicly Available
#' @inheritSection WHOCC WHOCC
@ -83,7 +81,7 @@
#' Data Set with `r format(nrow(microorganisms), big.mark = ",")` Microorganisms
#'
#' A data set containing the microbial taxonomy, last updated in `r CATALOGUE_OF_LIFE$yearmonth_LPSN`, of six kingdoms from the Catalogue of Life (CoL) and the List of Prokaryotic names with Standing in Nomenclature (LPSN). MO codes can be looked up using [as.mo()].
#' A data set containing the full microbial taxonomy (**last updated: `r CATALOGUE_OF_LIFE$yearmonth_LPSN`**) of `r nr2char(length(unique(microorganisms$kingdom[!microorganisms$kingdom %like% "unknown"])))` kingdoms from the Catalogue of Life (CoL) and the List of Prokaryotic names with Standing in Nomenclature (LPSN). MO codes can be looked up using [as.mo()].
#' @inheritSection catalogue_of_life Catalogue of Life
#' @format A [data.frame] with `r format(nrow(microorganisms), big.mark = ",")` observations and `r ncol(microorganisms)` variables:
#' - `mo`\cr ID of microorganism as used by this package
@ -105,20 +103,21 @@
#'
#' - 11 entries of *Streptococcus* (beta-haemolytic: groups A, B, C, D, F, G, H, K and unspecified; other: viridans, milleri)
#' - 2 entries of *Staphylococcus* (coagulase-negative (CoNS) and coagulase-positive (CoPS))
#' - 3 entries of *Trichomonas* (*Trichomonas vaginalis*, and its family and genus)
#' - 1 entry of *Candida* (*Candida krusei*), that is not (yet) in the Catalogue of Life
#' - 1 entry of *Blastocystis* (*Blastocystis hominis*), although it officially does not exist (Noel *et al.* 2005, PMID 15634993)
#' - 3 entries of *Trichomonas* (*T. vaginalis*, and its family and genus)
#' - 1 entry of *Candida* (*C. krusei*), that is not (yet) in the Catalogue of Life
#' - 1 entry of *Blastocystis* (*B. hominis*), although it officially does not exist (Noel *et al.* 2005, PMID 15634993)
#' - 1 entry of *Moraxella* (*M. catarrhalis*), which was formally named *Branhamella catarrhalis* (Catlin, 1970) though this change was never accepted within the field of clinical microbiology
#' - 5 other 'undefined' entries (unknown, unknown Gram negatives, unknown Gram positives, unknown yeast and unknown fungus)
#' - 6 families under the Enterobacterales order, according to Adeolu *et al.* (2016, PMID 27620848), that are not (yet) in the Catalogue of Life
#'
#' ## Direct download
#' This data set is available as 'flat file' for use even without \R - you can find the file here:
#'
#' * <https://github.com/msberends/AMR/raw/master/data-raw/microorganisms.txt>
#' * <https://github.com/msberends/AMR/raw/main/data-raw/microorganisms.txt>
#'
#' The file in \R format (with preserved data structure) can be found here:
#'
#' * <https://github.com/msberends/AMR/raw/master/data/microorganisms.rda>
#' * <https://github.com/msberends/AMR/raw/main/data/microorganisms.rda>
#' @section About the Records from LPSN (see *Source*):
#' The List of Prokaryotic names with Standing in Nomenclature (LPSN) provides comprehensive information on the nomenclature of prokaryotes. LPSN is a free to use service founded by Jean P. Euzeby in 1997 and later on maintained by Aidan C. Parte.
#'
@ -131,8 +130,8 @@
#' List of Prokaryotic names with Standing in Nomenclature (`r CATALOGUE_OF_LIFE$yearmonth_LPSN`) as currently implemented in this `AMR` package:
#'
#' * Parte, A.C., Sarda Carbasse, J., Meier-Kolthoff, J.P., Reimer, L.C. and Goker, M. (2020). List of Prokaryotic names with Standing in Nomenclature (LPSN) moves to the DSMZ. International Journal of Systematic and Evolutionary Microbiology, 70, 5607-5612; \doi{10.1099/ijsem.0.004332}
#' * Parte, A.C. (2018). LPSN List of Prokaryotic names with Standing in Nomenclature (bacterio.net), 20 years on. International Journal of Systematic and Evolutionary Microbiology, 68, 1825-1829; \doi{10.1099/ijsem.0.002786}
#' * Parte, A.C. (2014). LPSN List of Prokaryotic names with Standing in Nomenclature. Nucleic Acids Research, 42, Issue D1, D613D616; \doi{10.1093/nar/gkt1111}
#' * Parte, A.C. (2018). LPSN - List of Prokaryotic names with Standing in Nomenclature (bacterio.net), 20 years on. International Journal of Systematic and Evolutionary Microbiology, 68, 1825-1829; \doi{10.1099/ijsem.0.002786}
#' * Parte, A.C. (2014). LPSN - List of Prokaryotic names with Standing in Nomenclature. Nucleic Acids Research, 42, Issue D1, D613-D616; \doi{10.1093/nar/gkt1111}
#' * Euzeby, J.P. (1997). List of Bacterial Names with Standing in Nomenclature: a Folder Available on the Internet. International Journal of Systematic Bacteriology, 47, 590-592; \doi{10.1099/00207713-47-2-590}
#'
#' `r SNOMED_VERSION$current_source` as currently implemented in this `AMR` package:
@ -154,7 +153,7 @@
#' - `prevalence`\cr Prevalence of the microorganism, see [as.mo()]
#' @source Catalogue of Life: Annual Checklist (public online taxonomic database), <http://www.catalogueoflife.org> (check included annual version with [catalogue_of_life_version()]).
#'
#' Parte, A.C. (2018). LPSN List of Prokaryotic names with Standing in Nomenclature (bacterio.net), 20 years on. International Journal of Systematic and Evolutionary Microbiology, 68, 1825-1829; \doi{10.1099/ijsem.0.002786}
#' Parte, A.C. (2018). LPSN - List of Prokaryotic names with Standing in Nomenclature (bacterio.net), 20 years on. International Journal of Systematic and Evolutionary Microbiology, 68, 1825-1829; \doi{10.1099/ijsem.0.002786}
#' @inheritSection AMR Reference Data Publicly Available
#' @inheritSection AMR Read more on Our Website!
#' @seealso [as.mo()] [mo_property()] [microorganisms]
@ -245,13 +244,14 @@
#' - `method`\cr Either `r vector_or(rsi_translation$method)`
#' - `site`\cr Body site, e.g. "Oral" or "Respiratory"
#' - `mo`\cr Microbial ID, see [as.mo()]
#' - `rank_index`\cr Taxonomic rank index of `mo` from 1 (subspecies/infraspecies) to 5 (unknown microorganism)
#' - `ab`\cr Antibiotic ID, see [as.ab()]
#' - `ref_tbl`\cr Info about where the guideline rule can be found
#' - `disk_dose`\cr Dose of the used disk diffusion method
#' - `breakpoint_S`\cr Lowest MIC value or highest number of millimetres that leads to "S"
#' - `breakpoint_R`\cr Highest MIC value or lowest number of millimetres that leads to "R"
#' - `uti`\cr A [logical] value (`TRUE`/`FALSE`) to indicate whether the rule applies to a urinary tract infection (UTI)
#' @details The repository of this `AMR` package contains a file comprising this exact data set: <https://github.com/msberends/AMR/blob/master/data-raw/rsi_translation.txt>. This file **allows for machine reading EUCAST and CLSI guidelines**, which is almost impossible with the Excel and PDF files distributed by EUCAST and CLSI. The file is updated automatically.
#' @details The repository of this `AMR` package contains a file comprising this exact data set: <https://github.com/msberends/AMR/blob/main/data-raw/rsi_translation.txt>. This file **allows for machine reading EUCAST and CLSI guidelines**, which is almost impossible with the Excel and PDF files distributed by EUCAST and CLSI. The file is updated automatically and the `mo` and `ab` columns have been transformed to contain the full official names instead of codes.
#' @inheritSection AMR Reference Data Publicly Available
#' @inheritSection AMR Read more on Our Website!
#' @seealso [intrinsic_resistant]
@ -261,20 +261,22 @@
#'
#' Data set containing defined intrinsic resistance by EUCAST of all bug-drug combinations.
#' @format A [data.frame] with `r format(nrow(intrinsic_resistant), big.mark = ",")` observations and `r ncol(intrinsic_resistant)` variables:
#' - `microorganism`\cr Name of the microorganism
#' - `antibiotic`\cr Name of the antibiotic drug
#' @details The repository of this `AMR` package contains a file comprising this exact data set: <https://github.com/msberends/AMR/blob/master/data-raw/intrinsic_resistant.txt>. This file **allows for machine reading EUCAST guidelines about intrinsic resistance**, which is almost impossible with the Excel and PDF files distributed by EUCAST. The file is updated automatically.
#' - `mo`\cr Microorganism ID
#' - `ab`\cr Antibiotic ID
#' @details The repository of this `AMR` package contains a file comprising this data set with full taxonomic and antibiotic names: <https://github.com/msberends/AMR/blob/main/data-raw/intrinsic_resistant.txt>. This file **allows for machine reading EUCAST guidelines about intrinsic resistance**, which is almost impossible with the Excel and PDF files distributed by EUCAST. The file is updated automatically.
#'
#' This data set is based on `r format_eucast_version_nr(3.2)`.
#' This data set is based on `r format_eucast_version_nr(3.3)`.
#' @inheritSection AMR Reference Data Publicly Available
#' @inheritSection AMR Read more on Our Website!
#' @examples
#' \donttest{
#' if (require("dplyr")) {
#' intrinsic_resistant %>%
#' filter(antibiotic == "Vancomycin", microorganism %like% "Enterococcus") %>%
#' pull(microorganism)
#' # [1] "Enterococcus casseliflavus" "Enterococcus gallinarum"
#' mutate(mo = mo_name(mo),
#' ab = ab_name(mo))
#' filter(ab == "Vancomycin" & mo %like% "Enterococcus") %>%
#' pull(mo)
#' #> [1] "Enterococcus casseliflavus" "Enterococcus gallinarum"
#' }
#' }
"intrinsic_resistant"

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -119,6 +119,12 @@ all_valid_disks <- function(x) {
!any(is.na(x_disk)) && !all(is.na(x))
}
#' @rdname as.disk
#' @details `NA_disk_` is a missing value of the new `<disk>` class.
#' @export
NA_disk_ <- set_clean_class(as.integer(NA_real_),
new_class = c("disk", "integer"))
#' @rdname as.disk
#' @export
is.disk <- function(x) {

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -27,7 +27,7 @@
#'
#' These functions determine which items in a vector can be considered (the start of) a new episode, based on the argument `episode_days`. This can be used to determine clinical episodes for any epidemiological analysis. The [get_episode()] function returns the index number of the episode per group, while the [is_new_episode()] function returns values `TRUE`/`FALSE` to indicate whether an item in a vector is the start of a new episode.
#' @inheritSection lifecycle Stable Lifecycle
#' @param x vector of dates (class `Date` or `POSIXt`)
#' @param x vector of dates (class `Date` or `POSIXt`), will be sorted internally to determine episodes
#' @param episode_days required episode length in days, can also be less than a day or `Inf`, see *Details*
#' @param ... ignored, only in place to allow future extensions
#' @details
@ -105,11 +105,11 @@
#' }
#' }
get_episode <- function(x, episode_days, ...) {
meet_criteria(x, allow_class = c("Date", "POSIXt"))
meet_criteria(x, allow_class = c("Date", "POSIXt"), allow_NA = TRUE)
meet_criteria(episode_days, allow_class = c("numeric", "integer"), has_length = 1, is_positive = TRUE, is_finite = FALSE)
exec_episode(type = "sequential",
x = x,
exec_episode(x = x,
type = "sequential",
episode_days = episode_days,
... = ...)
}
@ -117,27 +117,27 @@ get_episode <- function(x, episode_days, ...) {
#' @rdname get_episode
#' @export
is_new_episode <- function(x, episode_days, ...) {
meet_criteria(x, allow_class = c("Date", "POSIXt"))
meet_criteria(x, allow_class = c("Date", "POSIXt"), allow_NA = TRUE)
meet_criteria(episode_days, allow_class = c("numeric", "integer"), has_length = 1, is_positive = TRUE, is_finite = FALSE)
exec_episode(type = "logical",
x = x,
exec_episode(x = x,
type = "logical",
episode_days = episode_days,
... = ...)
}
exec_episode <- function(type, x, episode_days, ...) {
exec_episode <- function(x, type, episode_days, ...) {
x <- as.double(as.POSIXct(x)) # as.POSIXct() required for Date classes
# since x is now in seconds, get seconds from episode_days as well
episode_seconds <- episode_days * 60 * 60 * 24
if (length(x) == 1) {
if (length(x) == 1) { # this will also match 1 NA, which is fine
if (type == "logical") {
return(TRUE)
} else if (type == "sequential") {
return(1)
}
} else if (length(x) == 2) {
} else if (length(x) == 2 && !all(is.na(x))) {
if (max(x) - min(x) >= episode_seconds) {
if (type == "logical") {
return(c(TRUE, TRUE))
@ -155,7 +155,7 @@ exec_episode <- function(type, x, episode_days, ...) {
# I asked on StackOverflow:
# https://stackoverflow.com/questions/42122245/filter-one-row-every-year
exec <- function(x, episode_seconds) {
run_episodes <- function(x, episode_seconds) {
indices <- integer()
start <- x[1]
ind <- 1
@ -181,11 +181,8 @@ exec_episode <- function(type, x, episode_days, ...) {
}
}
df <- data.frame(x = x,
y = seq_len(length(x))) %pm>%
pm_arrange(x)
df$new <- exec(df$x, episode_seconds)
df %pm>%
pm_arrange(y) %pm>%
pm_pull(new)
ord <- order(x)
out <- run_episodes(x[ord], episode_seconds)[order(ord)]
out[is.na(x) & ord != 1] <- NA # every NA but the first must remain NA
out
}

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -23,6 +23,10 @@
# how to conduct AMR data analysis: https://msberends.github.io/AMR/ #
# ==================================================================== #
# ====================================================== #
# || Change the EUCAST version numbers in R/globals.R || #
# ====================================================== #
format_eucast_version_nr <- function(version, markdown = TRUE) {
# for documentation - adds title, version number, year and url in markdown language
lst <- c(EUCAST_VERSION_BREAKPOINTS, EUCAST_VERSION_EXPERT_RULES)
@ -55,7 +59,7 @@ format_eucast_version_nr <- function(version, markdown = TRUE) {
#' @param verbose a [logical] to turn Verbose mode on and off (default is off). In Verbose mode, the function does not apply rules to the data, but instead returns a data set in logbook form with extensive info about which rows and columns would be effected and in which way. Using Verbose mode takes a lot more time.
#' @param version_breakpoints the version number to use for the EUCAST Clinical Breakpoints guideline. Can be either `r vector_or(names(EUCAST_VERSION_BREAKPOINTS), reverse = TRUE)`.
#' @param version_expertrules the version number to use for the EUCAST Expert Rules and Intrinsic Resistance guideline. Can be either `r vector_or(names(EUCAST_VERSION_EXPERT_RULES), reverse = TRUE)`.
#' @param ampc_cephalosporin_resistance a [character] value that should be applied to cefotaxime, ceftriaxone and ceftazidime for AmpC de-repressed cephalosporin-resistant mutants, defaults to `NA`. Currently only works when `version_expertrules` is `3.2`; '*EUCAST Expert Rules v3.2 on Enterobacterales*' states that results of cefotaxime, ceftriaxone and ceftazidime should be reported with a note, or results should be suppressed (emptied) for these three agents. A value of `NA` (the default) for this argument will remove results for these three agents, while e.g. a value of `"R"` will make the results for these agents resistant. Use `NULL` or `FALSE` to not alter results for these three agents of AmpC de-repressed cephalosporin-resistant mutants. Using `TRUE` is equal to using `"R"`. \cr For *EUCAST Expert Rules* v3.2, this rule applies to: `r vector_and(gsub("[^a-zA-Z ]+", "", unlist(strsplit(EUCAST_RULES_DF[which(EUCAST_RULES_DF$reference.version == 3.2 & EUCAST_RULES_DF$reference.rule %like% "ampc"), "this_value"][1], "|", fixed = TRUE))), quotes = "*")`.
#' @param ampc_cephalosporin_resistance a [character] value that should be applied to cefotaxime, ceftriaxone and ceftazidime for AmpC de-repressed cephalosporin-resistant mutants, defaults to `NA`. Currently only works when `version_expertrules` is `3.2` and higher; these version of '*EUCAST Expert Rules on Enterobacterales*' state that results of cefotaxime, ceftriaxone and ceftazidime should be reported with a note, or results should be suppressed (emptied) for these three agents. A value of `NA` (the default) for this argument will remove results for these three agents, while e.g. a value of `"R"` will make the results for these agents resistant. Use `NULL` or `FALSE` to not alter results for these three agents of AmpC de-repressed cephalosporin-resistant mutants. Using `TRUE` is equal to using `"R"`. \cr For *EUCAST Expert Rules* v3.2, this rule applies to: `r vector_and(gsub("[^a-zA-Z ]+", "", unlist(strsplit(EUCAST_RULES_DF[which(EUCAST_RULES_DF$reference.version %in% c(3.2, 3.3) & EUCAST_RULES_DF$reference.rule %like% "ampc"), "this_value"][1], "|", fixed = TRUE))), quotes = "*")`.
#' @param ... column name of an antibiotic, see section *Antibiotics* below
#' @param ab any (vector of) text that can be coerced to a valid antibiotic code with [as.ab()]
#' @param administration route of administration, either `r vector_or(dosage$administration)`
@ -66,7 +70,7 @@ format_eucast_version_nr <- function(version, markdown = TRUE) {
#' **Note:** This function does not translate MIC values to RSI values. Use [as.rsi()] for that. \cr
#' **Note:** When ampicillin (AMP, J01CA01) is not available but amoxicillin (AMX, J01CA04) is, the latter will be used for all rules where there is a dependency on ampicillin. These drugs are interchangeable when it comes to expression of antimicrobial resistance. \cr
#'
#' The file containing all EUCAST rules is located here: <https://github.com/msberends/AMR/blob/master/data-raw/eucast_rules.tsv>. **Note:** Old taxonomic names are replaced with the current taxonomy where applicable. For example, *Ochrobactrum anthropi* was renamed to *Brucella anthropi* in 2020; the original EUCAST rules v3.1 and v3.2 did not yet contain this new taxonomic name. The file used as input for this `AMR` package contains the taxonomy updated until [`r CATALOGUE_OF_LIFE$yearmonth_LPSN`][catalogue_of_life()].
#' The file containing all EUCAST rules is located here: <https://github.com/msberends/AMR/blob/main/data-raw/eucast_rules.tsv>. **Note:** Old taxonomic names are replaced with the current taxonomy where applicable. For example, *Ochrobactrum anthropi* was renamed to *Brucella anthropi* in 2020; the original EUCAST rules v3.1 and v3.2 did not yet contain this new taxonomic name. The file used as input for this `AMR` package contains the taxonomy updated until [`r CATALOGUE_OF_LIFE$yearmonth_LPSN`][catalogue_of_life()].
#'
#' ## Custom Rules
#'
@ -105,6 +109,7 @@ format_eucast_version_nr <- function(version, markdown = TRUE) {
#' Leclercq et al. **EUCAST expert rules in antimicrobial susceptibility testing.** *Clin Microbiol Infect.* 2013;19(2):141-60; \doi{https://doi.org/10.1111/j.1469-0691.2011.03703.x}
#' - EUCAST Expert Rules, Intrinsic Resistance and Exceptional Phenotypes Tables. Version 3.1, 2016. [(link)](https://www.eucast.org/fileadmin/src/media/PDFs/EUCAST_files/Expert_Rules/Expert_rules_intrinsic_exceptional_V3.1.pdf)
#' - EUCAST Intrinsic Resistance and Unusual Phenotypes. Version 3.2, 2020. [(link)](https://www.eucast.org/fileadmin/src/media/PDFs/EUCAST_files/Expert_Rules/2020/Intrinsic_Resistance_and_Unusual_Phenotypes_Tables_v3.2_20200225.pdf)
#' - EUCAST Intrinsic Resistance and Unusual Phenotypes. Version 3.3, 2021. [(link)](https://www.eucast.org/fileadmin/src/media/PDFs/EUCAST_files/Expert_Rules/2021/Intrinsic_Resistance_and_Unusual_Phenotypes_Tables_v3.3_20211018.pdf)
#' - EUCAST Breakpoint tables for interpretation of MICs and zone diameters. Version 9.0, 2019. [(link)](https://www.eucast.org/fileadmin/src/media/PDFs/EUCAST_files/Breakpoint_tables/v_9.0_Breakpoint_Tables.xlsx)
#' - EUCAST Breakpoint tables for interpretation of MICs and zone diameters. Version 10.0, 2020. [(link)](https://www.eucast.org/fileadmin/src/media/PDFs/EUCAST_files/Breakpoint_tables/v_10.0_Breakpoint_Tables.xlsx)
#' - EUCAST Breakpoint tables for interpretation of MICs and zone diameters. Version 11.0, 2021. [(link)](https://www.eucast.org/fileadmin/src/media/PDFs/EUCAST_files/Breakpoint_tables/v_11.0_Breakpoint_Tables.xlsx)
@ -159,7 +164,7 @@ eucast_rules <- function(x,
rules = getOption("AMR_eucastrules", default = c("breakpoints", "expert")),
verbose = FALSE,
version_breakpoints = 11.0,
version_expertrules = 3.2,
version_expertrules = 3.3,
ampc_cephalosporin_resistance = NA,
only_rsi_columns = FALSE,
custom_rules = NULL,
@ -300,6 +305,7 @@ eucast_rules <- function(x,
verbose = verbose,
info = info,
only_rsi_columns = only_rsi_columns,
fn = "eucast_rules",
...)
if (!"AMP" %in% names(cols_ab) & "AMX" %in% names(cols_ab)) {
@ -316,25 +322,6 @@ eucast_rules <- function(x,
}
# Some helper functions ---------------------------------------------------
get_antibiotic_columns <- function(x, cols_ab) {
x <- trimws(unique(toupper(unlist(strsplit(x, ",")))))
x_new <- character()
for (val in x) {
if (paste0("AB_", val) %in% ls(envir = asNamespace("AMR"))) {
# antibiotic group names, as defined in data-raw/_internals.R, such as `AB_CARBAPENEMS`
val <- eval(parse(text = paste0("AB_", val)), envir = asNamespace("AMR"))
} else if (val %in% AB_lookup$ab) {
# separate drugs, such as `AMX`
val <- as.ab(val)
} else {
stop_("unknown antimicrobial agent (group) in EUCAST rules file: ", val, call = FALSE)
}
x_new <- c(x_new, val)
}
x_new <- unique(x_new)
out <- cols_ab[match(x_new, names(cols_ab))]
out[!is.na(out)]
}
get_antibiotic_names <- function(x) {
x <- x %pm>%
strsplit(",") %pm>%
@ -580,6 +567,7 @@ eucast_rules <- function(x,
(reference.rule_group %like% "expert" & reference.version == version_expertrules))
}
# filter out AmpC de-repressed cephalosporin-resistant mutants ----
# no need to filter on version number here - the rules contain these version number, so are inherently filtered
# cefotaxime, ceftriaxone, ceftazidime
if (is.null(ampc_cephalosporin_resistance) || isFALSE(ampc_cephalosporin_resistance)) {
eucast_rules_df <- subset(eucast_rules_df,
@ -720,7 +708,7 @@ eucast_rules <- function(x,
rows <- tryCatch(which(x[, if_mo_property, drop = TRUE] %like% mo_value),
error = function(e) integer(0))
} else {
source_antibiotics <- get_antibiotic_columns(source_antibiotics, cols_ab)
source_antibiotics <- get_ab_from_namespace(source_antibiotics, cols_ab)
if (length(source_value) == 1 & length(source_antibiotics) > 1) {
source_value <- rep(source_value, length(source_antibiotics))
}
@ -748,7 +736,7 @@ eucast_rules <- function(x,
}
}
cols <- get_antibiotic_columns(target_antibiotics, cols_ab)
cols <- get_ab_from_namespace(target_antibiotics, cols_ab)
# Apply rule on data ------------------------------------------------------
# this will return the unique number of changes
@ -1068,7 +1056,7 @@ eucast_dosage <- function(ab, administration = "iv", version_breakpoints = 11.0)
meet_criteria(version_breakpoints, allow_class = c("numeric", "integer"), has_length = 1, is_in = as.double(names(EUCAST_VERSION_BREAKPOINTS)))
# show used version_breakpoints number once per session (pkg_env will reload every session)
if (message_not_thrown_before(paste0("eucast_dosage_v", gsub("[^0-9]", "", version_breakpoints)), entire_session = TRUE)) {
if (message_not_thrown_before("eucast_dosage", "v", gsub("[^0-9]", "", version_breakpoints), entire_session = TRUE)) {
message_("Dosages for antimicrobial drugs, as meant for ",
format_eucast_version_nr(version_breakpoints, markdown = FALSE), ". ",
font_red("This note will be shown once per session."))

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -23,9 +23,9 @@
# how to conduct AMR data analysis: https://msberends.github.io/AMR/ #
# ==================================================================== #
#' Determine First (Weighted) Isolates
#' Determine First Isolates
#'
#' Determine first (weighted) isolates of all microorganisms of every patient per episode and (if needed) per specimen type. These functions support all four methods as summarised by Hindler *et al.* in 2007 (\doi{10.1086/511864}). To determine patient episodes not necessarily based on microorganisms, use [is_new_episode()] that also supports grouping with the `dplyr` package.
#' Determine first isolates of all microorganisms of every patient per episode and (if needed) per specimen type. These functions support all four methods as summarised by Hindler *et al.* in 2007 (\doi{10.1086/511864}). To determine patient episodes not necessarily based on microorganisms, use [is_new_episode()] that also supports grouping with the `dplyr` package.
#' @inheritSection lifecycle Stable Lifecycle
#' @param x a [data.frame] containing isolates. Can be left blank for automatic determination, see *Examples*.
#' @param col_date column name of the result date (or date that is was received on the lab), defaults to the first column with a date class
@ -34,7 +34,7 @@
#' @param col_testcode column name of the test codes. Use `col_testcode = NULL` to **not** exclude certain test codes (such as test codes for screening). In that case `testcodes_exclude` will be ignored.
#' @param col_specimen column name of the specimen type or group
#' @param col_icu column name of the logicals (`TRUE`/`FALSE`) whether a ward or department is an Intensive Care Unit (ICU)
#' @param col_keyantimicrobials (only useful when `method = "phenotype-based"`) column name of the key antimicrobials to determine first (weighted) isolates, see [key_antimicrobials()]. Defaults to the first column that starts with 'key' followed by 'ab' or 'antibiotics' or 'antimicrobials' (case insensitive). Use `col_keyantimicrobials = FALSE` to prevent this. Can also be the output of [key_antimicrobials()].
#' @param col_keyantimicrobials (only useful when `method = "phenotype-based"`) column name of the key antimicrobials to determine first isolates, see [key_antimicrobials()]. Defaults to the first column that starts with 'key' followed by 'ab' or 'antibiotics' or 'antimicrobials' (case insensitive). Use `col_keyantimicrobials = FALSE` to prevent this. Can also be the output of [key_antimicrobials()].
#' @param episode_days episode in days after which a genus/species combination will be determined as 'first isolate' again. The default of 365 days is based on the guideline by CLSI, see *Source*.
#' @param testcodes_exclude a [character] vector with test codes that should be excluded (case-insensitive)
#' @param icu_exclude a [logical] to indicate whether ICU isolates should be excluded (rows with value `TRUE` in the column set with `col_icu`)
@ -102,9 +102,9 @@
#'
#' This is a more reliable method, since it also *weighs* the antibiogram (antimicrobial test results) yielding so-called 'first weighted isolates'. There are two different methods to weigh the antibiogram:
#'
#' 1. Using `type = "points"` and argument `points_threshold`
#' 1. Using `type = "points"` and argument `points_threshold` (default)
#'
#' This method weighs *all* antimicrobial agents available in the data set. Any difference from I to S or R (or vice versa) counts as 0.5 points, a difference from S to R (or vice versa) counts as 1 point. When the sum of points exceeds `points_threshold`, which defaults to `2`, an isolate will be selected as a first weighted isolate.
#' This method weighs *all* antimicrobial agents available in the data set. Any difference from I to S or R (or vice versa) counts as `0.5` points, a difference from S to R (or vice versa) counts as `1` point. When the sum of points exceeds `points_threshold`, which defaults to `2`, an isolate will be selected as a first weighted isolate.
#'
#' All antimicrobials are internally selected using the [all_antimicrobials()] function. The output of this function does not need to be passed to the [first_isolate()] function.
#'
@ -125,7 +125,7 @@
#'
#' - **M39 Analysis and Presentation of Cumulative Antimicrobial Susceptibility Test Data, 4th Edition**, 2014, *Clinical and Laboratory Standards Institute (CLSI)*. <https://clsi.org/standards/products/microbiology/documents/m39/>.
#'
#' - Hindler JF and Stelling J (2007). **Analysis and Presentation of Cumulative Antibiograms: A New Consensus Guideline from the Clinical and Laboratory Standards Institute.** Clinical Infectious Diseases, 44(6), 867873. \doi{10.1086/511864}
#' - Hindler JF and Stelling J (2007). **Analysis and Presentation of Cumulative Antibiograms: A New Consensus Guideline from the Clinical and Laboratory Standards Institute.** Clinical Infectious Diseases, 44(6), 867-873. \doi{10.1086/511864}
#' @inheritSection AMR Read more on Our Website!
#' @examples
#' # `example_isolates` is a data set available in the AMR package.
@ -218,7 +218,7 @@ first_isolate <- function(x = NULL,
meet_criteria(col_icu, allow_class = "character", has_length = 1, allow_NULL = TRUE, is_in = colnames(x))
# method
method <- coerce_method(method)
meet_criteria(method, allow_class = "character", has_length = 1, is_in = c("phenotype-based", "episode-based", "patient-based", "isolate-based", "p", "e", "i"))
meet_criteria(method, allow_class = "character", has_length = 1, is_in = c("phenotype-based", "episode-based", "patient-based", "isolate-based"))
# key antimicrobials
if (length(col_keyantimicrobials) > 1) {
meet_criteria(col_keyantimicrobials, allow_class = "character", has_length = nrow(x))
@ -238,7 +238,7 @@ first_isolate <- function(x = NULL,
meet_criteria(testcodes_exclude, allow_class = "character", allow_NULL = TRUE)
meet_criteria(icu_exclude, allow_class = "logical", has_length = 1)
meet_criteria(specimen_group, allow_class = "character", has_length = 1, allow_NULL = TRUE)
meet_criteria(type, allow_class = "character", has_length = 1)
meet_criteria(type, allow_class = "character", has_length = 1, is_in = c("points", "keyantimicrobials"))
meet_criteria(ignore_I, allow_class = "logical", has_length = 1)
meet_criteria(points_threshold, allow_class = c("numeric", "integer"), has_length = 1, is_positive = TRUE, is_finite = TRUE)
meet_criteria(info, allow_class = "logical", has_length = 1)
@ -250,17 +250,18 @@ first_isolate <- function(x = NULL,
any_col_contains_rsi <- any(vapply(FUN.VALUE = logical(1),
X = x,
FUN = function(x) any(as.character(x) %in% c("R", "S", "I"), na.rm = TRUE),
# check only first 10,000 rows
FUN = function(x) any(as.character(x[1:10000]) %in% c("R", "S", "I"), na.rm = TRUE),
USE.NAMES = FALSE))
if (method == "phenotype-based" & !any_col_contains_rsi) {
method <- "episode-based"
}
if (info == TRUE & message_not_thrown_before("first_isolate.method")) {
message_(paste0("Determining first isolates using the '", font_bold(method), "' method",
if (info == TRUE & message_not_thrown_before("first_isolate", "method")) {
message_(paste0("Determining first isolates ",
ifelse(method %in% c("episode-based", "phenotype-based"),
ifelse(is.infinite(episode_days),
" without a specified episode length",
paste(" and an episode length of", episode_days, "days")),
"without a specified episode length",
paste("using an episode length of", episode_days, "days")),
"")),
as_note = FALSE,
add_fn = font_black)
@ -359,8 +360,8 @@ first_isolate <- function(x = NULL,
testcodes_exclude <- NULL
}
# remove testcodes
if (!is.null(testcodes_exclude) & info == TRUE & message_not_thrown_before("first_isolate.excludingtestcodes")) {
message_("Excluding test codes: ", toString(paste0("'", testcodes_exclude, "'")),
if (!is.null(testcodes_exclude) & info == TRUE & message_not_thrown_before("first_isolate", "excludingtestcodes")) {
message_("Excluding test codes: ", vector_and(testcodes_exclude, quotes = TRUE),
add_fn = font_black,
as_note = FALSE)
}
@ -372,7 +373,7 @@ first_isolate <- function(x = NULL,
# filter on specimen group and keyantibiotics when they are filled in
if (!is.null(specimen_group)) {
check_columns_existance(col_specimen, x)
if (info == TRUE & message_not_thrown_before("first_isolate.excludingspecimen")) {
if (info == TRUE & message_not_thrown_before("first_isolate", "excludingspecimen")) {
message_("Excluding other than specimen group '", specimen_group, "'",
add_fn = font_black,
as_note = FALSE)
@ -443,21 +444,8 @@ first_isolate <- function(x = NULL,
!is.na(x$newvar_mo)), , drop = FALSE])
# Analysis of first isolate ----
x$other_pat_or_mo <- ifelse(x$newvar_patient_id == pm_lag(x$newvar_patient_id) &
x$newvar_genus_species == pm_lag(x$newvar_genus_species),
FALSE,
TRUE)
x$episode_group <- paste(x$newvar_patient_id, x$newvar_genus_species)
x$more_than_episode_ago <- unlist(lapply(split(x$newvar_date,
x$episode_group),
is_new_episode,
episode_days = episode_days),
use.names = FALSE)
weighted.notice <- ""
if (!is.null(col_keyantimicrobials)) {
weighted.notice <- "weighted "
if (info == TRUE & message_not_thrown_before("first_isolate.type")) {
if (info == TRUE & message_not_thrown_before("first_isolate", "type")) {
if (type == "keyantimicrobials") {
message_("Basing inclusion on key antimicrobials, ",
ifelse(ignore_I == FALSE, "not ", ""),
@ -472,21 +460,34 @@ first_isolate <- function(x = NULL,
as_note = FALSE)
}
}
type_param <- type
}
x$other_pat_or_mo <- ifelse(x$newvar_patient_id == pm_lag(x$newvar_patient_id) &
x$newvar_genus_species == pm_lag(x$newvar_genus_species),
FALSE,
TRUE)
x$episode_group <- paste(x$newvar_patient_id, x$newvar_genus_species)
x$more_than_episode_ago <- unlist(lapply(split(x$newvar_date,
x$episode_group),
exec_episode, # this will skip meet_criteria() in is_new_episode(), saving time
type = "logical",
episode_days = episode_days),
use.names = FALSE)
if (!is.null(col_keyantimicrobials)) {
# with key antibiotics
x$other_key_ab <- !antimicrobials_equal(y = x$newvar_key_ab,
z = pm_lag(x$newvar_key_ab),
type = type_param,
type = type,
ignore_I = ignore_I,
points_threshold = points_threshold)
# with key antibiotics
x$newvar_first_isolate <- pm_if_else(x$newvar_row_index_sorted >= row.start &
x$newvar_row_index_sorted <= row.end &
x$newvar_genus_species != "" &
(x$other_pat_or_mo | x$more_than_episode_ago | x$other_key_ab),
TRUE,
FALSE)
} else {
# no key antibiotics
x$newvar_first_isolate <- pm_if_else(x$newvar_row_index_sorted >= row.start &
@ -568,7 +569,7 @@ first_isolate <- function(x = NULL,
}
# arrange back according to original sorting again
x <- x[order(x$newvar_row_index), ]
x <- x[order(x$newvar_row_index), , drop = FALSE]
rownames(x) <- NULL
if (info == TRUE) {
@ -583,16 +584,16 @@ first_isolate <- function(x = NULL,
}
# mark up number of found
n_found <- format(n_found, big.mark = big.mark, decimal.mark = decimal.mark)
if (p_found_total != p_found_scope) {
msg_txt <- paste0("=> Found ",
font_bold(paste0(n_found, " first ", weighted.notice, "isolates")),
" (", method, ", ", p_found_scope, " within scope and ", p_found_total, " of total where a microbial ID was available)")
} else {
msg_txt <- paste0("=> Found ",
font_bold(paste0(n_found, " first ", weighted.notice, "isolates")),
" (", method, ", ", p_found_total, " of total where a microbial ID was available)")
}
message_(msg_txt, add_fn = font_black, as_note = FALSE)
message_(paste0("=> Found ",
font_bold(paste0(n_found,
ifelse(method == "isolate-based", "", paste0(" '", method, "'")),
" first isolates")),
" (",
ifelse(p_found_total != p_found_scope,
paste0(p_found_scope, " within scope and "),
""),
p_found_total, " of total where a microbial ID was available)"),
add_fn = font_black, as_note = FALSE)
}
x$newvar_first_isolate
@ -619,7 +620,7 @@ filter_first_isolate <- function(x = NULL,
meet_criteria(col_mo, allow_class = "character", has_length = 1, allow_NULL = TRUE, is_in = colnames(x))
meet_criteria(episode_days, allow_class = c("numeric", "integer"), has_length = 1, is_positive = TRUE, is_finite = FALSE)
method <- coerce_method(method)
meet_criteria(method, allow_class = "character", has_length = 1, is_in = c("phenotype-based", "episode-based", "patient-based", "isolate-based", "p", "e", "i"))
meet_criteria(method, allow_class = "character", has_length = 1, is_in = c("phenotype-based", "episode-based", "patient-based", "isolate-based"))
subset(x, first_isolate(x = x,
col_date = col_date,
@ -637,7 +638,7 @@ coerce_method <- function(method) {
method <- tolower(as.character(method[1L]))
method[method %like% "^(p$|pheno)"] <- "phenotype-based"
method[method %like% "^(e$|episode)"] <- "episode-based"
method[method %like% "^patient"] <- "patient-based"
method[method %like% "^pat"] <- "patient-based"
method[method %like% "^(i$|iso)"] <- "isolate-based"
method
}

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -158,7 +158,7 @@ ggplot_rsi <- function(data,
combine_SI = TRUE,
combine_IR = FALSE,
minimum = 30,
language = get_locale(),
language = get_AMR_locale(),
nrow = NULL,
colours = c(S = "#3CAEA3",
SI = "#3CAEA3",
@ -269,7 +269,7 @@ geom_rsi <- function(position = NULL,
fill = "interpretation",
translate_ab = "name",
minimum = 30,
language = get_locale(),
language = get_AMR_locale(),
combine_SI = TRUE,
combine_IR = FALSE,
...) {
@ -438,7 +438,7 @@ labels_rsi_count <- function(position = NULL,
x = "antibiotic",
translate_ab = "name",
minimum = 30,
language = get_locale(),
language = get_AMR_locale(),
combine_SI = TRUE,
combine_IR = FALSE,
datalabels.size = 3,

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -75,7 +75,8 @@ guess_ab_col <- function(x = NULL, search_string = NULL, verbose = FALSE, only_r
meet_criteria(search_string, allow_class = "character", has_length = 1, allow_NULL = FALSE)
}
all_found <- get_column_abx(x, info = verbose, only_rsi_columns = only_rsi_columns, verbose = verbose)
all_found <- get_column_abx(x, info = verbose, only_rsi_columns = only_rsi_columns,
verbose = verbose, fn = "guess_ab_col")
search_string.ab <- suppressWarnings(as.ab(search_string))
ab_result <- unname(all_found[names(all_found) == search_string.ab])
@ -104,10 +105,12 @@ get_column_abx <- function(x,
info = TRUE,
only_rsi_columns = FALSE,
sort = TRUE,
reuse_previous_result = TRUE) {
reuse_previous_result = TRUE,
fn = NULL) {
# check if retrieved before, then get it from package environment
if (isTRUE(reuse_previous_result) && identical(unique_call_id(entire_session = FALSE), pkg_env$get_column_abx.call)) {
if (isTRUE(reuse_previous_result) && identical(unique_call_id(entire_session = FALSE,
match_fn = fn),
pkg_env$get_column_abx.call)) {
# so within the same call, within the same environment, we got here again.
# but we could've come from another function within the same call, so now only check the columns that changed
@ -179,7 +182,7 @@ get_column_abx <- function(x,
} else {
return(NA_character_)
}
})
}, USE.NAMES = FALSE)
x_columns <- x_columns[!is.na(x_columns)]
x <- x[, x_columns, drop = FALSE] # without drop = FALSE, x will become a vector when x_columns is length 1
@ -192,13 +195,29 @@ get_column_abx <- function(x,
# add from self-defined dots (...):
# such as get_column_abx(example_isolates %>% rename(thisone = AMX), amox = "thisone")
all_okay <- TRUE
dots <- list(...)
# remove data.frames, since this is also used running `eucast_rules(eucast_rules_df = df)`
dots <- dots[!vapply(FUN.VALUE = logical(1), dots, is.data.frame)]
if (length(dots) > 0) {
newnames <- suppressWarnings(as.ab(names(dots), info = FALSE))
if (any(is.na(newnames))) {
warning_("Invalid antibiotic reference(s): ", toString(names(dots)[is.na(newnames)]),
if (info == TRUE) {
message_(" WARNING", add_fn = list(font_yellow, font_bold), as_note = FALSE)
}
warning_("Invalid antibiotic reference(s): ", vector_and(names(dots)[is.na(newnames)], quotes = FALSE),
call = FALSE,
immediate = TRUE)
all_okay <- FALSE
}
unexisting_cols <- which(!vapply(FUN.VALUE = logical(1), dots, function(col) all(col %in% x_columns)))
if (length(unexisting_cols) > 0) {
if (info == TRUE) {
message_(" ERROR", add_fn = list(font_red, font_bold), as_note = FALSE)
}
stop_("Column(s) not found: ", vector_and(unlist(dots[[unexisting_cols]]), quotes = FALSE),
call = FALSE)
all_okay <- FALSE
}
# turn all NULLs to NAs
dots <- unlist(lapply(dots, function(dot) if (is.null(dot)) NA else dot))
@ -211,10 +230,10 @@ get_column_abx <- function(x,
}
if (length(out) == 0) {
if (info == TRUE) {
if (info == TRUE & all_okay == TRUE) {
message_("No columns found.")
}
pkg_env$get_column_abx.call <- unique_call_id(entire_session = FALSE)
pkg_env$get_column_abx.call <- unique_call_id(entire_session = FALSE, match_fn = fn)
pkg_env$get_column_abx.checked_cols <- colnames(x.bak)
pkg_env$get_column_abx.out <- out
return(out)
@ -224,33 +243,42 @@ get_column_abx <- function(x,
if (sort == TRUE) {
out <- out[order(names(out), out)]
}
duplicates <- c(out[duplicated(out)], out[duplicated(names(out))])
duplicates <- duplicates[unique(names(duplicates))]
out <- c(out[!names(out) %in% names(duplicates)], duplicates)
# only keep the first hits, no duplicates
duplicates <- c(out[duplicated(names(out))], out[duplicated(unname(out))])
if (length(duplicates) > 0) {
all_okay <- FALSE
}
if (info == TRUE) {
if (all_okay == TRUE) {
message_(" OK.", add_fn = list(font_green, font_bold), as_note = FALSE)
} else {
message_(" WARNING.", add_fn = list(font_yellow, font_bold), as_note = FALSE)
}
for (i in seq_len(length(out))) {
if (verbose == TRUE & !names(out[i]) %in% names(duplicates)) {
message_("Using column '", font_bold(out[i]), "' as input for ", names(out)[i],
" (", ab_name(names(out)[i], tolower = TRUE, language = NULL), ").")
}
if (names(out[i]) %in% names(duplicates)) {
already_set_as <- out[unname(out) == unname(out[i])][1L]
warning_(paste0("Column '", font_bold(out[i]), "' will not be used for ",
names(out)[i], " (", ab_name(names(out)[i], tolower = TRUE, language = NULL), ")",
", as it is already set for ",
names(already_set_as), " (", ab_name(names(already_set_as), tolower = TRUE, language = NULL), ")"),
add_fn = font_red,
call = FALSE,
immediate = verbose)
}
}
}
out <- out[!duplicated(names(out))]
out <- out[!duplicated(unname(out))]
if (sort == TRUE) {
out <- out[order(names(out), out)]
}
# succeeded with auto-guessing
if (info == TRUE) {
message_(" OK.", add_fn = list(font_green, font_bold), as_note = FALSE)
}
for (i in seq_len(length(out))) {
if (info == TRUE & verbose == TRUE & !names(out[i]) %in% names(duplicates)) {
message_("Using column '", font_bold(out[i]), "' as input for ", names(out)[i],
" (", ab_name(names(out)[i], tolower = TRUE, language = NULL), ").")
}
if (info == TRUE & names(out[i]) %in% names(duplicates)) {
warning_(paste0("Using column '", font_bold(out[i]), "' as input for ", names(out)[i],
" (", ab_name(names(out)[i], tolower = TRUE, language = NULL),
"), although it was matched for multiple antibiotics or columns."),
add_fn = font_red,
call = FALSE,
immediate = verbose)
}
}
if (!is.null(hard_dependencies)) {
hard_dependencies <- unique(hard_dependencies)
if (!all(hard_dependencies %in% names(out))) {
@ -273,12 +301,34 @@ get_column_abx <- function(x,
}
}
pkg_env$get_column_abx.call <- unique_call_id(entire_session = FALSE)
pkg_env$get_column_abx.call <- unique_call_id(entire_session = FALSE, match_fn = fn)
pkg_env$get_column_abx.checked_cols <- colnames(x.bak)
pkg_env$get_column_abx.out <- out
out
}
get_ab_from_namespace <- function(x, cols_ab) {
# cols_ab comes from get_column_abx()
x <- trimws(unique(toupper(unlist(strsplit(x, ",")))))
x_new <- character()
for (val in x) {
if (paste0("AB_", val) %in% ls(envir = asNamespace("AMR"))) {
# antibiotic group names, as defined in data-raw/_internals.R, such as `AB_CARBAPENEMS`
val <- eval(parse(text = paste0("AB_", val)), envir = asNamespace("AMR"))
} else if (val %in% AB_lookup$ab) {
# separate drugs, such as `AMX`
val <- as.ab(val)
} else {
stop_("unknown antimicrobial agent (group): ", val, call = FALSE)
}
x_new <- c(x_new, val)
}
x_new <- unique(x_new)
out <- cols_ab[match(x_new, names(cols_ab))]
out[!is.na(out)]
}
generate_warning_abs_missing <- function(missing, any = FALSE) {
missing <- paste0(missing, " (", ab_name(missing, tolower = TRUE, language = NULL), ")")
if (any == TRUE) {

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -26,7 +26,7 @@
#' Italicise Taxonomic Families, Genera, Species, Subspecies
#'
#' According to the binomial nomenclature, the lowest four taxonomic levels (family, genus, species, subspecies) should be printed in italic. This function finds taxonomic names within strings and makes them italic.
#' @inheritSection lifecycle Maturing Lifecycle
#' @inheritSection lifecycle Stable Lifecycle
#' @param string a [character] (vector)
#' @param type type of conversion of the taxonomic names, either "markdown" or "ansi", see *Details*
#' @details

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -142,7 +142,7 @@ key_antimicrobials <- function(x = NULL,
# force regular data.frame, not a tibble or data.table
x <- as.data.frame(x, stringsAsFactors = FALSE)
cols <- get_column_abx(x, info = FALSE, only_rsi_columns = only_rsi_columns)
cols <- get_column_abx(x, info = FALSE, only_rsi_columns = only_rsi_columns, fn = "key_antimicrobials")
# try to find columns based on type
# -- mo
@ -171,7 +171,7 @@ key_antimicrobials <- function(x = NULL,
if (values_new_length < values_old_length &
any(filter, na.rm = TRUE) &
message_not_thrown_before(paste0("key_antimicrobials.", name))) {
message_not_thrown_before("key_antimicrobials", name)) {
warning_(ifelse(values_new_length == 0,
"No columns available ",
paste0("Only using ", values_new_length, " out of ", values_old_length, " defined columns ")),
@ -238,7 +238,8 @@ all_antimicrobials <- function(x = NULL,
# force regular data.frame, not a tibble or data.table
x <- as.data.frame(x, stringsAsFactors = FALSE)
cols <- get_column_abx(x, only_rsi_columns = only_rsi_columns, info = FALSE, sort = FALSE)
cols <- get_column_abx(x, only_rsi_columns = only_rsi_columns, info = FALSE,
sort = FALSE, fn = "all_antimicrobials")
generate_antimcrobials_string(x[ , cols, drop = FALSE])
}
@ -250,16 +251,16 @@ generate_antimcrobials_string <- function(df) {
if (NROW(df) == 0) {
return(character(0))
}
out <- tryCatch(
tryCatch({
do.call(paste0,
lapply(as.list(df),
function(x) {
x <- toupper(as.character(x))
x[!x %in% c("R", "S", "I")] <- "."
paste(x)
})),
error = function(e) rep(strrep(".", NCOL(df)), NROW(df)))
out
}))
},
error = function(e) rep(strrep(".", NCOL(df)), NROW(df)))
}
#' @rdname key_antimicrobials
@ -279,10 +280,20 @@ antimicrobials_equal <- function(y,
stop_ifnot(length(y) == length(z), "length of `y` and `z` must be equal")
key2rsi <- function(val) {
as.double(as.rsi(gsub(".", NA_character_, unlist(strsplit(val, "")), fixed = TRUE)))
val <- strsplit(val, "")[[1L]]
val.int <- rep(NA_real_, length(val))
val.int[val == "S"] <- 1
val.int[val == "I"] <- 2
val.int[val == "R"] <- 3
val.int
}
y <- lapply(y, key2rsi)
z <- lapply(z, key2rsi)
# only run on uniques
uniq <- unique(c(y, z))
uniq_list <- lapply(uniq, key2rsi)
names(uniq_list) <- uniq
y <- uniq_list[match(y, names(uniq_list))]
z <- uniq_list[match(z, names(uniq_list))]
determine_equality <- function(a, b, type, points_threshold, ignore_I) {
if (length(a) != length(b)) {

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -44,7 +44,7 @@
#' \if{html}{\figure{lifecycle_stable.svg}{options: style=margin-bottom:5px} \cr}
#' The [lifecycle][AMR::lifecycle] of this function is **stable**. In a stable function, major changes are unlikely. This means that the unlying code will generally evolve by adding new arguments; removing arguments or changing the meaning of existing arguments will be avoided.
#'
#' If the unlying code needs breaking changes, they will occur gradually. For example, a argument will be deprecated and first continue to work, but will emit an message informing you of the change. Next, typically after at least one newly released version on CRAN, the message will be transformed to an error.
#' If the unlying code needs breaking changes, they will occur gradually. For example, an argument will be deprecated and first continue to work, but will emit an message informing you of the change. Next, typically after at least one newly released version on CRAN, the message will be transformed to an error.
#' @section Retired Lifecycle:
#' \if{html}{\figure{lifecycle_retired.svg}{options: style=margin-bottom:5px} \cr}
#' The [lifecycle][AMR::lifecycle] of this function is **retired**. A retired function is no longer under active development, and (if appropiate) a better alternative is available. No new arguments will be added, and only the most critical bugs will be fixed. In a future version, this function will be removed.

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -69,7 +69,7 @@
#' # get isolates whose name start with 'Ent' or 'ent'
#' example_isolates[which(mo_name(example_isolates$mo) %like% "^ent"), ]
#' \donttest{
#' # faster way, only works in R 3.2 and later:
#' # faster way, since mo_name() is context-aware:
#' example_isolates[which(mo_name() %like% "^ent"), ]
#'
#' if (require("dplyr")) {
@ -124,31 +124,23 @@ like <- function(x, pattern, ignore.case = TRUE) {
#' @rdname like
#' @export
"%like%" <- function(x, pattern) {
meet_criteria(x, allow_NA = TRUE)
meet_criteria(pattern, allow_NA = FALSE)
like(x, pattern, ignore.case = TRUE)
}
#' @rdname like
#' @export
"%unlike%" <- function(x, pattern) {
meet_criteria(x, allow_NA = TRUE)
meet_criteria(pattern, allow_NA = FALSE)
!like(x, pattern, ignore.case = TRUE)
}
#' @rdname like
#' @export
"%like_case%" <- function(x, pattern) {
meet_criteria(x, allow_NA = TRUE)
meet_criteria(pattern, allow_NA = FALSE)
like(x, pattern, ignore.case = FALSE)
}
#' @rdname like
#' @export
"%unlike_case%" <- function(x, pattern) {
meet_criteria(x, allow_NA = TRUE)
meet_criteria(pattern, allow_NA = FALSE)
!like(x, pattern, ignore.case = FALSE)
}

200
R/mdro.R
View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -51,7 +51,11 @@
#'
#' Magiorakos AP, Srinivasan A *et al.* "Multidrug-resistant, extensively drug-resistant and pandrug-resistant bacteria: an international expert proposal for interim standard definitions for acquired resistance." Clinical Microbiology and Infection (2012) ([link](https://www.clinicalmicrobiologyandinfection.com/article/S1198-743X(14)61632-3/fulltext))
#'
#' * `guideline = "EUCAST3.2"` (or simply `guideline = "EUCAST"`)
#' * `guideline = "EUCAST3.3"` (or simply `guideline = "EUCAST"`)
#'
#' The European international guideline - EUCAST Expert Rules Version 3.3 "Intrinsic Resistance and Unusual Phenotypes" ([link](https://www.eucast.org/fileadmin/src/media/PDFs/EUCAST_files/Expert_Rules/2021/Intrinsic_Resistance_and_Unusual_Phenotypes_Tables_v3.3_20211018.pdf))
#'
#' * `guideline = "EUCAST3.2"`
#'
#' The European international guideline - EUCAST Expert Rules Version 3.2 "Intrinsic Resistance and Unusual Phenotypes" ([link](https://www.eucast.org/fileadmin/src/media/PDFs/EUCAST_files/Expert_Rules/2020/Intrinsic_Resistance_and_Unusual_Phenotypes_Tables_v3.2_20200225.pdf))
#'
@ -73,7 +77,6 @@
#'
#' Please suggest your own (country-specific) guidelines by letting us know: <https://github.com/msberends/AMR/issues/new>.
#'
#'
#' @section Using Custom Guidelines:
#'
#' Custom guidelines can be set with the [custom_mdro_guideline()] function. This is of great importance if you have custom rules to determine MDROs in your hospital, e.g., rules that are dependent on ward, state of contact isolation or other variables in your data.
@ -283,7 +286,7 @@ mdro <- function(x = NULL,
}
if (guideline == "eucast") {
# turn into latest EUCAST guideline
guideline <- "eucast3.2"
guideline <- "eucast3.3"
}
if (guideline == "nl") {
guideline <- "brmo"
@ -291,7 +294,7 @@ mdro <- function(x = NULL,
if (guideline == "de") {
guideline <- "mrgn"
}
stop_ifnot(guideline %in% c("brmo", "mrgn", "eucast3.1", "eucast3.2", "tb", "cmi2012"),
stop_ifnot(guideline %in% c("brmo", "mrgn", "eucast3.1", "eucast3.2", "eucast3.3", "tb", "cmi2012"),
"invalid guideline: ", guideline.bak)
guideline <- list(code = guideline)
@ -325,10 +328,17 @@ mdro <- function(x = NULL,
} else if (guideline$code == "eucast3.2") {
guideline$name <- "EUCAST Expert Rules, \"Intrinsic Resistance and Unusual Phenotypes\""
guideline$author <- "EUCAST (European Committee on Antimicrobial Susceptibility Testing)"
guideline$version <- "3.2, 2020"
guideline$version <- "3.2, February 2020"
guideline$source_url <- "https://www.eucast.org/fileadmin/src/media/PDFs/EUCAST_files/Expert_Rules/2020/Intrinsic_Resistance_and_Unusual_Phenotypes_Tables_v3.2_20200225.pdf"
guideline$type <- "EUCAST Unusual Phenotypes"
} else if (guideline$code == "eucast3.3") {
guideline$name <- "EUCAST Expert Rules, \"Intrinsic Resistance and Unusual Phenotypes\""
guideline$author <- "EUCAST (European Committee on Antimicrobial Susceptibility Testing)"
guideline$version <- "3.3, October 2021"
guideline$source_url <- "https://www.eucast.org/fileadmin/src/media/PDFs/EUCAST_files/Expert_Rules/2021/Intrinsic_Resistance_and_Unusual_Phenotypes_Tables_v3.3_20211018.pdf"
guideline$type <- "EUCAST Unusual Phenotypes"
} else if (guideline$code == "tb") {
guideline$name <- "Companion handbook to the WHO guidelines for the programmatic management of drug-resistant tuberculosis"
guideline$author <- "WHO (World Health Organization)"
@ -474,6 +484,7 @@ mdro <- function(x = NULL,
verbose = verbose,
info = info,
only_rsi_columns = only_rsi_columns,
fn = "mdro",
...)
} else if (guideline$code == "eucast3.2") {
cols_ab <- get_column_abx(x = x,
@ -502,6 +513,36 @@ mdro <- function(x = NULL,
verbose = verbose,
info = info,
only_rsi_columns = only_rsi_columns,
fn = "mdro",
...)
} else if (guideline$code == "eucast3.3") {
cols_ab <- get_column_abx(x = x,
soft_dependencies = c("AMP",
"AMX",
"CIP",
"DAL",
"DAP",
"ERV",
"FDX",
"GEN",
"LNZ",
"MEM",
"MTR",
"OMC",
"ORI",
"PEN",
"QDA",
"RIF",
"TEC",
"TGC",
"TLV",
"TOB",
"TZD",
"VAN"),
verbose = verbose,
info = info,
only_rsi_columns = only_rsi_columns,
fn = "mdro",
...)
} else if (guideline$code == "tb") {
cols_ab <- get_column_abx(x = x,
@ -516,6 +557,7 @@ mdro <- function(x = NULL,
verbose = verbose,
info = info,
only_rsi_columns = only_rsi_columns,
fn = "mdro",
...)
} else if (guideline$code == "mrgn") {
cols_ab <- get_column_abx(x = x,
@ -528,14 +570,23 @@ mdro <- function(x = NULL,
verbose = verbose,
info = info,
only_rsi_columns = only_rsi_columns,
fn = "mdro",
...)
} else {
cols_ab <- get_column_abx(x = x,
verbose = verbose,
info = info,
only_rsi_columns = only_rsi_columns,
fn = "mdro",
...)
}
if (!"AMP" %in% names(cols_ab) & "AMX" %in% names(cols_ab)) {
# ampicillin column is missing, but amoxicillin is available
if (info == TRUE) {
message_("Using column '", cols_ab[names(cols_ab) == "AMX"], "' as input for ampicillin since many EUCAST rules depend on it.")
}
cols_ab <- c(cols_ab, c(AMP = unname(cols_ab[names(cols_ab) == "AMX"])))
}
# nolint start
AMC <- cols_ab["AMC"]
@ -738,7 +789,8 @@ mdro <- function(x = NULL,
x[rows, "columns_nonsusceptible"] <<- vapply(FUN.VALUE = character(1),
rows,
function(row, group_vct = cols) {
cols_nonsus <- vapply(FUN.VALUE = logical(1), x[row, group_vct, drop = FALSE],
cols_nonsus <- vapply(FUN.VALUE = logical(1),
x[row, group_vct, drop = FALSE],
function(y) y %in% search_result)
paste(sort(c(unlist(strsplit(x[row, "columns_nonsusceptible", drop = TRUE], ", ")),
names(cols_nonsus)[cols_nonsus])),
@ -752,17 +804,20 @@ mdro <- function(x = NULL,
}
x_transposed <- as.list(as.data.frame(t(x[, cols, drop = FALSE]),
stringsAsFactors = FALSE))
row_filter <- vapply(FUN.VALUE = logical(1), x_transposed, function(y) search_function(y %in% search_result, na.rm = TRUE))
row_filter <- x[which(row_filter), "row_number", drop = TRUE]
rows <- rows[rows %in% row_filter]
x[rows, "MDRO"] <<- to
x[rows, "reason"] <<- paste0(any_all,
" of the required antibiotics ",
ifelse(any_all == "any", "is", "are"),
" R",
ifelse(!isTRUE(combine_SI), " or I", ""))
rows_affected <- vapply(FUN.VALUE = logical(1),
x_transposed,
function(y) search_function(y %in% search_result, na.rm = TRUE))
rows_affected <- x[which(rows_affected), "row_number", drop = TRUE]
rows_to_change <- rows[rows %in% rows_affected]
x[rows_to_change, "MDRO"] <<- to
x[rows_to_change, "reason"] <<- paste0(any_all,
" of the required antibiotics ",
ifelse(any_all == "any", "is", "are"),
" R",
ifelse(!isTRUE(combine_SI), " or I", ""))
}
}
trans_tbl2 <- function(txt, rows, lst) {
if (info == TRUE) {
message_(txt, "...", appendLF = FALSE, as_note = FALSE)
@ -1160,10 +1215,80 @@ mdro <- function(x = NULL,
which(x$genus == "Streptococcus" & x$species == "pneumoniae"),
c(carbapenems, VAN, TEC, TLV, DAL, ORI, DAP, LNZ, TZD, QDA, TGC, ERV, OMC, RIF),
"any")
streps <- MO_lookup[which(MO_lookup$genus == "Streptococcus"), "mo", drop = TRUE]
streps_ABCG <- streps[as.mo(streps, Lancefield = TRUE) %in% c("B_STRPT_GRPA", "B_STRPT_GRPB", "B_STRPT_GRPC", "B_STRPT_GRPG")]
trans_tbl(3, # Sr. groups A/B/C/G
which(x$mo %in% streps_ABCG),
which(x$mo %in% MO_STREP_ABCG),
c(PEN, cephalosporins, VAN, TEC, TLV, DAL, ORI, DAP, LNZ, TZD, QDA, TGC, ERV, OMC),
"any")
trans_tbl(3,
which(x$genus == "Enterococcus"),
c(DAP, LNZ, TGC, ERV, OMC, TEC),
"any")
trans_tbl(3,
which(x$genus == "Enterococcus" & x$species == "faecalis"),
c(AMP, AMX),
"any")
# Table 8
trans_tbl(3,
which(x$genus == "Bacteroides"),
MTR,
"any")
trans_tbl(3,
which(x$genus == "Clostridium" & x$species == "difficile"),
c(MTR, VAN, FDX),
"any")
}
if (guideline$code == "eucast3.3") {
# EUCAST 3.3 --------------------------------------------------------------
# note: this guideline is equal to EUCAST 3.2 - no MDRO insights changed
# Table 6
trans_tbl(3,
which((x$order == "Enterobacterales" &
!x$family == "Morganellaceae" &
!(x$genus == "Serratia" & x$species == "marcescens"))
| (x$genus == "Pseudomonas" & x$species == "aeruginosa")
| x$genus == "Acinetobacter"),
COL,
"all")
trans_tbl(3,
which(x$genus == "Salmonella" & x$species == "Typhi"),
c(carbapenems),
"any")
trans_tbl(3,
which(x$genus == "Haemophilus" & x$species == "influenzae"),
c(cephalosporins_3rd, carbapenems, fluoroquinolones),
"any")
trans_tbl(3,
which(x$genus == "Moraxella" & x$species == "catarrhalis"),
c(cephalosporins_3rd, fluoroquinolones),
"any")
trans_tbl(3,
which(x$genus == "Neisseria" & x$species == "meningitidis"),
c(cephalosporins_3rd, fluoroquinolones),
"any")
trans_tbl(3,
which(x$genus == "Neisseria" & x$species == "gonorrhoeae"),
SPT,
"any")
# Table 7
trans_tbl(3,
which(x$genus == "Staphylococcus" & x$species == "aureus"),
c(VAN, TEC, TLV, DAL, ORI, DAP, LNZ, TZD, QDA, TGC, ERV, OMC),
"any")
trans_tbl(3,
which(x$mo %in% MO_CONS), # coagulase-negative Staphylococcus
c(VAN, TLV, DAL, ORI, DAP, LNZ, TZD, QDA, TGC, ERV, OMC),
"any")
trans_tbl(3,
which(x$genus == "Corynebacterium"),
c(VAN, TEC, TLV, DAL, ORI, DAP, LNZ, TZD, QDA, TGC),
"any")
trans_tbl(3,
which(x$genus == "Streptococcus" & x$species == "pneumoniae"),
c(carbapenems, VAN, TEC, TLV, DAL, ORI, DAP, LNZ, TZD, QDA, TGC, ERV, OMC, RIF),
"any")
trans_tbl(3, # Sr. groups A/B/C/G
which(x$mo %in% MO_STREP_ABCG),
c(PEN, cephalosporins, VAN, TEC, TLV, DAL, ORI, DAP, LNZ, TZD, QDA, TGC, ERV, OMC),
"any")
trans_tbl(3,
@ -1382,16 +1507,6 @@ mdro <- function(x = NULL,
x$reason <- "PDR/MDR/XDR criteria were met"
}
if (info.bak == TRUE) {
cat(group_msg)
if (sum(!is.na(x$MDRO)) == 0) {
cat(font_bold(paste0("=> Found 0 MDROs since no isolates are covered by the guideline")))
} else {
cat(font_bold(paste0("=> Found ", sum(x$MDRO %in% c(2:5), na.rm = TRUE), " ", guideline$type, " out of ", sum(!is.na(x$MDRO)),
" isolates (", trimws(percentage(sum(x$MDRO %in% c(2:5), na.rm = TRUE) / sum(!is.na(x$MDRO)))), ")\n")))
}
}
# some more info on negative results
if (verbose == TRUE) {
if (guideline$code == "cmi2012") {
@ -1406,10 +1521,35 @@ mdro <- function(x = NULL,
}
}
if (info.bak == TRUE) {
cat(group_msg)
if (sum(!is.na(x$MDRO)) == 0) {
cat(font_bold(paste0("=> Found 0 MDROs since no isolates are covered by the guideline")))
} else {
cat(font_bold(paste0("=> Found ", sum(x$MDRO %in% c(2:5), na.rm = TRUE), " ", guideline$type, " out of ", sum(!is.na(x$MDRO)),
" isolates (", trimws(percentage(sum(x$MDRO %in% c(2:5), na.rm = TRUE) / sum(!is.na(x$MDRO)))), ")")))
}
}
# Fill in blanks ----
# for rows that have no results
x_transposed <- as.list(as.data.frame(t(x[, cols_ab, drop = FALSE]),
stringsAsFactors = FALSE))
rows_empty <- which(vapply(FUN.VALUE = logical(1),
x_transposed,
function(y) all(is.na(y))))
if (length(rows_empty) > 0) {
cat(font_italic(paste0(" (", length(rows_empty), " isolates had no test results)\n")))
x[rows_empty, "MDRO"] <- NA
x[rows_empty, "reason"] <- "none of the antibiotics have test results"
} else {
cat("\n")
}
# Results ----
if (guideline$code == "cmi2012") {
if (any(x$MDRO == -1, na.rm = TRUE)) {
if (message_not_thrown_before("mdro.availability")) {
if (message_not_thrown_before("mdro", "availability")) {
warning_("NA introduced for isolates where the available percentage of antimicrobial classes was below ",
percentage(pct_required_classes), " (set with `pct_required_classes`)", call = FALSE)
}

58
R/mic.R
View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -23,9 +23,26 @@
# how to conduct AMR data analysis: https://msberends.github.io/AMR/ #
# ==================================================================== #
# these are allowed MIC values and will become [factor] levels
ops <- c("<", "<=", "", ">=", ">")
valid_mic_levels <- c(c(t(vapply(FUN.VALUE = character(9), ops,
function(x) paste0(x, "0.00", 1:9)))),
unique(c(t(vapply(FUN.VALUE = character(104), ops,
function(x) paste0(x, sort(as.double(paste0("0.0",
sort(c(1:99, 125, 128, 256, 512, 625)))))))))),
unique(c(t(vapply(FUN.VALUE = character(103), ops,
function(x) paste0(x, sort(as.double(paste0("0.",
c(1:99, 125, 128, 256, 512))))))))),
c(t(vapply(FUN.VALUE = character(10), ops,
function(x) paste0(x, sort(c(1:9, 1.5)))))),
c(t(vapply(FUN.VALUE = character(45), ops,
function(x) paste0(x, c(10:98)[9:98 %% 2 == TRUE])))),
c(t(vapply(FUN.VALUE = character(16), ops,
function(x) paste0(x, sort(c(2 ^ c(7:11), 80 * c(2:12))))))))
#' Transform Input to Minimum Inhibitory Concentrations (MIC)
#'
#' This ransforms vectors to a new class [`mic`], which treats the input as decimal numbers, while maintaining operators (such as ">=") and only allowing valid MIC values known to the field of (medical) microbiology.
#' This transforms vectors to a new class [`mic`], which treats the input as decimal numbers, while maintaining operators (such as ">=") and only allowing valid MIC values known to the field of (medical) microbiology.
#' @inheritSection lifecycle Stable Lifecycle
#' @rdname as.mic
#' @param x a [character] or [numeric] vector
@ -117,6 +134,8 @@ as.mic <- function(x, na.rm = FALSE) {
# transform Unicode for >= and <=
x <- gsub("\u2264", "<=", x, fixed = TRUE)
x <- gsub("\u2265", ">=", x, fixed = TRUE)
# remove other invalid characters
x <- gsub("[^a-zA-Z0-9.><= ]+", "", x, perl = TRUE)
# remove space between operator and number ("<= 0.002" -> "<=0.002")
x <- gsub("(<|=|>) +", "\\1", x, perl = TRUE)
# transform => to >= and =< to <=
@ -141,27 +160,14 @@ as.mic <- function(x, na.rm = FALSE) {
x[x %like% "[.]"] <- gsub("0+$", "", x[x %like% "[.]"])
# never end with dot
x <- gsub("[.]$", "", x, perl = TRUE)
# force to be character
x <- as.character(x)
# trim it
x <- trimws(x)
## previously unempty values now empty - should return a warning later on
x[x.bak != "" & x == ""] <- "invalid"
# these are allowed MIC values and will become [factor] levels
ops <- c("<", "<=", "", ">=", ">")
lvls <- c(c(t(vapply(FUN.VALUE = character(9), ops, function(x) paste0(x, "0.00", 1:9)))),
unique(c(t(vapply(FUN.VALUE = character(104), ops, function(x) paste0(x, sort(as.double(paste0("0.0",
sort(c(1:99, 125, 128, 256, 512, 625)))))))))),
unique(c(t(vapply(FUN.VALUE = character(103), ops, function(x) paste0(x, sort(as.double(paste0("0.",
c(1:99, 125, 128, 256, 512))))))))),
c(t(vapply(FUN.VALUE = character(10), ops, function(x) paste0(x, sort(c(1:9, 1.5)))))),
c(t(vapply(FUN.VALUE = character(45), ops, function(x) paste0(x, c(10:98)[9:98 %% 2 == TRUE])))),
c(t(vapply(FUN.VALUE = character(15), ops, function(x) paste0(x, sort(c(2 ^ c(7:10), 80 * c(2:12))))))))
na_before <- x[is.na(x) | x == ""] %pm>% length()
x[!x %in% lvls] <- NA
x[!x %in% valid_mic_levels] <- NA
na_after <- x[is.na(x) | x == ""] %pm>% length()
if (na_before != na_after) {
@ -175,7 +181,7 @@ as.mic <- function(x, na.rm = FALSE) {
list_missing, call = FALSE)
}
set_clean_class(factor(x, levels = lvls, ordered = TRUE),
set_clean_class(factor(x, levels = valid_mic_levels, ordered = TRUE),
new_class = c("mic", "ordered", "factor"))
}
}
@ -189,6 +195,12 @@ all_valid_mics <- function(x) {
!any(is.na(x_mic)) && !all(is.na(x))
}
#' @rdname as.mic
#' @details `NA_mic_` is a missing value of the new `<mic>` class.
#' @export
NA_mic_ <- set_clean_class(factor(NA, levels = valid_mic_levels, ordered = TRUE),
new_class = c("mic", "ordered", "factor"))
#' @rdname as.mic
#' @export
is.mic <- function(x) {
@ -616,6 +628,12 @@ cummin.mic <- function(x) {
# Ops (see ?groupGeneric) -----------------------------------------------
is_greater <- function(el) {
el %like_case% ">[0-9]"
}
is_lower <- function(el) {
el %like_case% "<[0-9]"
}
#' @method + mic
#' @export
@ -727,6 +745,12 @@ cummin.mic <- function(x) {
#' @noRd
`>.mic` <- function(e1, e2) {
as.double(e1) > as.double(e2)
# doesn't work...
# nolint start
# as.double(e1) > as.double(e2) |
# (as.double(e1) == as.double(e2) & is_lower(e2) & !is_lower(e1)) |
# (as.double(e1) == as.double(e2) & is_greater(e1) & !is_greater(e2))
# nolint end
}
# Summary (see ?groupGeneric) -------------------------------------------

173
R/mo.R
View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -37,7 +37,7 @@
#' @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 probable results, see *Details*
#' @param reference_df a [data.frame] to be used for extra reference when translating `x` to a valid [`mo`]. See [set_mo_source()] and [get_mo_source()] to automate the usage of your own codes (e.g. used in your analysis or organisation).
#' @param ignore_pattern a regular expression (case-insensitive) of which all matches in `x` must return `NA`. This can be convenient to exclude known non-relevant input and can also be set with the option `AMR_ignore_pattern`, e.g. `options(AMR_ignore_pattern = "(not reported|contaminated flora)")`.
#' @param language language to translate text like "no growth", which defaults to the system language (see [get_locale()])
#' @param language language to translate text like "no growth", which defaults to the system language (see [get_AMR_locale()])
#' @param info a [logical] to indicate if a progress bar should be printed if more than 25 items are to be coerced, defaults to `TRUE` only in interactive mode
#' @param ... other arguments passed on to functions
#' @rdname as.mo
@ -103,10 +103,10 @@
#' @inheritSection catalogue_of_life Catalogue of Life
# (source as a section here, so it can be inherited by other man pages:)
#' @section Source:
#' 1. Becker K *et al.* **Coagulase-Negative Staphylococci**. 2014. Clin Microbiol Rev. 27(4): 870926; \doi{10.1128/CMR.00109-13}
#' 1. Becker K *et al.* **Coagulase-Negative Staphylococci**. 2014. Clin Microbiol Rev. 27(4): 870-926; \doi{10.1128/CMR.00109-13}
#' 2. Becker K *et al.* **Implications of identifying the recently defined members of the *S. aureus* complex, *S. argenteus* and *S. schweitzeri*: A position paper of members of the ESCMID Study Group for staphylococci and Staphylococcal Diseases (ESGS).** 2019. Clin Microbiol Infect; \doi{10.1016/j.cmi.2019.02.028}
#' 3. Becker K *et al.* **Emergence of coagulase-negative staphylococci** 2020. Expert Rev Anti Infect Ther. 18(4):349-366; \doi{10.1080/14787210.2020.1730813}
#' 4. Lancefield RC **A serological differentiation of human and other groups of hemolytic streptococci**. 1933. J Exp Med. 57(4): 57195; \doi{10.1084/jem.57.4.571}
#' 4. Lancefield RC **A serological differentiation of human and other groups of hemolytic streptococci**. 1933. J Exp Med. 57(4): 571-95; \doi{10.1084/jem.57.4.571}
#' 5. `r gsub("{year}", CATALOGUE_OF_LIFE$year, CATALOGUE_OF_LIFE$version, fixed = TRUE)`, <http://www.catalogueoflife.org>
#' 6. List of Prokaryotic names with Standing in Nomenclature (`r CATALOGUE_OF_LIFE$yearmonth_LPSN`), \doi{10.1099/ijsem.0.004332}
#' 7. `r SNOMED_VERSION$current_source`, retrieved from the `r SNOMED_VERSION$title`, OID `r SNOMED_VERSION$current_oid`, version `r SNOMED_VERSION$current_version`; url: <`r SNOMED_VERSION$url`>
@ -161,7 +161,7 @@ as.mo <- function(x,
allow_uncertain = TRUE,
reference_df = get_mo_source(),
ignore_pattern = getOption("AMR_ignore_pattern"),
language = get_locale(),
language = get_AMR_locale(),
info = interactive(),
...) {
meet_criteria(x, allow_class = c("mo", "data.frame", "list", "character", "numeric", "integer", "factor"), allow_NA = TRUE)
@ -201,7 +201,8 @@ as.mo <- function(x,
& isFALSE(Becker)
& isFALSE(Lancefield), error = function(e) FALSE)) {
# to improve speed, special case for taxonomically correct full names (case-insensitive)
return(MO_lookup[match(gsub(".*(unknown ).*", "unknown name", tolower(x), perl = TRUE), MO_lookup$fullname_lower), "mo", drop = TRUE])
return(set_clean_class(MO_lookup[match(gsub(".*(unknown ).*", "unknown name", tolower(x), perl = TRUE), MO_lookup$fullname_lower), "mo", drop = TRUE],
new_class = c("mo", "character")))
}
if (!is.null(reference_df)
@ -233,7 +234,7 @@ as.mo <- function(x,
info = info,
...)
}
set_clean_class(y,
new_class = c("mo", "character"))
}
@ -266,7 +267,7 @@ exec_as.mo <- function(x,
reference_data_to_use = MO_lookup,
actual_uncertainty = 1,
actual_input = NULL,
language = get_locale()) {
language = get_AMR_locale()) {
meet_criteria(x, allow_class = c("mo", "data.frame", "list", "character", "numeric", "integer", "factor"), allow_NA = TRUE)
meet_criteria(Becker, allow_class = c("logical", "character"), has_length = 1)
meet_criteria(Lancefield, allow_class = c("logical", "character"), has_length = 1)
@ -372,7 +373,7 @@ exec_as.mo <- function(x,
# Laboratory systems: remove (translated) entries like "no growth", etc.
x[trimws2(x) %like% translate_AMR("no .*growth", language = language)] <- NA_character_
x[trimws2(x) %like% paste0("^(", translate_AMR("no|not", language = language), ") [a-z]+")] <- "UNKNOWN"
if (initial_search == TRUE) {
# keep track of time - give some hints to improve speed if it takes a long time
start_time <- Sys.time()
@ -468,7 +469,7 @@ exec_as.mo <- function(x,
x_backup_untouched <- x
x <- strip_whitespace(x, dyslexia_mode)
# translate 'unknown' names back to English
if (any(x %like% "unbekannt|onbekend|desconocid|sconosciut|iconnu|desconhecid", na.rm = TRUE)) {
if (any(tolower(x) %like_case% "unbekannt|onbekend|desconocid|sconosciut|iconnu|desconhecid", na.rm = TRUE)) {
trns <- subset(TRANSLATIONS, pattern %like% "unknown")
langs <- LANGUAGES_SUPPORTED[LANGUAGES_SUPPORTED != "en"]
for (l in langs) {
@ -484,6 +485,10 @@ exec_as.mo <- function(x,
}
}
# remove spp and species
x <- gsub("(^| )[ .]*(spp|ssp|ss|sp|subsp|subspecies|biovar|biotype|serovar|species)[ .]*( |$)", "", x, ignore.case = TRUE, perl = TRUE)
x <- strip_whitespace(x, dyslexia_mode)
x_backup <- x
# from here on case-insensitive
@ -495,26 +500,26 @@ exec_as.mo <- function(x,
# Fill in fullnames and MO codes directly
known_names <- tolower(x_backup) %in% MO_lookup$fullname_lower
x[known_names] <- MO_lookup[match(tolower(x_backup)[known_names], MO_lookup$fullname_lower), property, drop = TRUE]
known_codes <- toupper(x_backup) %in% MO_lookup$mo
x[known_codes] <- MO_lookup[match(toupper(x_backup)[known_codes], MO_lookup$mo), property, drop = TRUE]
already_known <- known_names | known_codes
known_codes_mo <- toupper(x_backup) %in% MO_lookup$mo
x[known_codes_mo] <- MO_lookup[match(toupper(x_backup)[known_codes_mo], MO_lookup$mo), property, drop = TRUE]
known_codes_lis <- toupper(x_backup) %in% microorganisms.codes$code
x[known_codes_lis] <- MO_lookup[match(microorganisms.codes[match(toupper(x_backup)[known_codes_lis],
microorganisms.codes$code), "mo", drop = TRUE],
MO_lookup$mo), property, drop = TRUE]
already_known <- known_names | known_codes_mo | known_codes_lis
# now only continue where the right taxonomic output is not already known
if (any(!already_known)) {
x_known <- x[already_known]
# remove spp and species
x <- gsub(" +(spp.?|ssp.?|sp.? |ss ?.?|subsp.?|subspecies|biovar |serovar |species)", " ", x)
x <- gsub("(spp.?|subsp.?|subspecies|biovar|serovar|species)", "", x)
x <- gsub("^([a-z]{2,4})(spe.?)$", "\\1", x, perl = TRUE) # when ending in SPE instead of SPP and preceded by 2-4 characters
x <- strip_whitespace(x, dyslexia_mode)
# when ending in SPE instead of SPP and preceded by 2-4 characters
x <- gsub("^([a-z]{2,4})(spe.?)$", "\\1", x, perl = TRUE)
x_backup_without_spp <- x
x_species <- paste(x, "species")
# translate to English for supported languages of mo_property
x <- gsub("(gruppe|groep|grupo|gruppo|groupe)", "group", x, perl = TRUE)
# no groups and complexes as ending
x <- gsub("(complex|group)$", "", x, perl = TRUE)
x <- gsub("(complex|group|serotype|serovar|serogroup)[^a-zA-Z]*$", "", x, perl = TRUE)
x <- gsub("(^|[^a-z])((an)?aero+b)[a-z]*", "", x, perl = TRUE)
x <- gsub("^atyp[a-z]*", "", x, perl = TRUE)
x <- gsub("(vergroen)[a-z]*", "viridans", x, perl = TRUE)
@ -541,12 +546,12 @@ exec_as.mo <- function(x,
# 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|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)
x <- gsub("[iy]+", "[iy]+", x, perl = TRUE)
x <- gsub("(c|k|q|qu|s|z|x|ks)+", "(c|k|q|qu|s|z|x|ks)+", x, perl = TRUE)
x <- gsub("(ph|hp|f|v)+", "(ph|hp|f|v)+", x, perl = TRUE)
x <- gsub("(th|ht|t)+", "(th|ht|t)+", x, perl = TRUE)
x <- gsub("a+", "a+", x, perl = TRUE)
x <- gsub("u+", "u+", x, perl = TRUE)
# allow any ending of -um, -us, -ium, -icum, -ius, -icus, -ica, -ia and -a (needs perl for the negative backward lookup):
x <- gsub("(u\\+\\(c\\|k\\|q\\|qu\\+\\|s\\|z\\|x\\|ks\\)\\+)(?![a-z])",
"(u[s|m]|[iy][ck]?u[ms]|[iy]?[ck]?a)", x, perl = TRUE)
@ -556,9 +561,9 @@ exec_as.mo <- function(x,
"(u[s|m]|[iy][ck]?u[ms]|[iy]?[ck]?a)", x, perl = TRUE)
x <- gsub("(\\[iy\\]\\+a\\+)(?![a-z])",
"([iy]*a+|[iy]+a*)", x, perl = TRUE)
x <- gsub("e+", "e+", x)
x <- gsub("o+", "o+", x)
x <- gsub("(.)\\1+", "\\1+", x)
x <- gsub("e+", "e+", x, perl = TRUE)
x <- gsub("o+", "o+", x, perl = TRUE)
x <- gsub("(.)\\1+", "\\1+", x, perl = TRUE)
# allow multiplication of all other consonants
x <- gsub("([bdgjlnrw]+)", "\\1+", x, perl = TRUE)
# allow ending in -en or -us
@ -570,6 +575,8 @@ exec_as.mo <- function(x,
# allow au and ou after all above regex implementations
x <- gsub("a+[bcdfghjklmnpqrstvwxyz]?u+[bcdfghjklmnpqrstvwxyz]?", "(a+u+|o+u+)[bcdfghjklmnpqrstvwxyz]?", x, fixed = TRUE)
x <- gsub("o+[bcdfghjklmnpqrstvwxyz]?u+[bcdfghjklmnpqrstvwxyz]?", "(a+u+|o+u+)[bcdfghjklmnpqrstvwxyz]?", x, fixed = TRUE)
# correct for a forgotten Latin ae instead of e
x <- gsub("e+", "a*e+", x, fixed = TRUE)
}
x <- strip_whitespace(x, dyslexia_mode)
# make sure to remove regex overkill (will lead to errors)
@ -577,10 +584,9 @@ exec_as.mo <- function(x,
x <- gsub("?+", "?", x, fixed = TRUE)
x_trimmed <- x
x_trimmed_species <- paste(x_trimmed, "species")
x_trimmed_without_group <- gsub(" gro.u.p$", "", x_trimmed, perl = TRUE)
# remove last part from "-" or "/"
x_trimmed_without_group <- gsub("(.*)[-/].*", "\\1", x_trimmed_without_group)
x_trimmed_without_group <- gsub("(.*)[-/].*", "\\1", x_trimmed_without_group, perl = TRUE)
# replace space and dot by regex sign
x_withspaces <- gsub("[ .]+", ".* ", x, perl = TRUE)
x <- gsub("[ .]+", ".*", x, perl = TRUE)
@ -593,14 +599,12 @@ exec_as.mo <- function(x,
if (isTRUE(debug)) {
cat(paste0(font_blue("x"), ' "', x, '"\n'))
cat(paste0(font_blue("x_species"), ' "', x_species, '"\n'))
cat(paste0(font_blue("x_withspaces_start_only"), ' "', x_withspaces_start_only, '"\n'))
cat(paste0(font_blue("x_withspaces_end_only"), ' "', x_withspaces_end_only, '"\n'))
cat(paste0(font_blue("x_withspaces_start_end"), ' "', x_withspaces_start_end, '"\n'))
cat(paste0(font_blue("x_backup"), ' "', x_backup, '"\n'))
cat(paste0(font_blue("x_backup_without_spp"), ' "', x_backup_without_spp, '"\n'))
cat(paste0(font_blue("x_trimmed"), ' "', x_trimmed, '"\n'))
cat(paste0(font_blue("x_trimmed_species"), ' "', x_trimmed_species, '"\n'))
cat(paste0(font_blue("x_trimmed_without_group"), ' "', x_trimmed_without_group, '"\n'))
}
@ -712,7 +716,7 @@ exec_as.mo <- function(x,
# fewer than 3 chars and not looked for species, add as failure
x[i] <- lookup(mo == "UNKNOWN")
if (initial_search == TRUE) {
failures <- c(failures, x_backup[i])
failures <- c(failures, x_backup_untouched[i])
}
next
}
@ -749,7 +753,7 @@ exec_as.mo <- function(x,
# - EIEC (Entero-Invasive E. coli)
# - EPEC (Entero-Pathogenic E. coli)
# - ETEC (Entero-Toxigenic E. coli)
# - NMEC (Neonatal Meningitiscausing E. coli)
# - NMEC (Neonatal Meningitis-causing E. coli)
# - STEC (Shiga-toxin producing E. coli)
# - UPEC (Uropathogenic E. coli)
if (toupper(x_backup_without_spp[i]) %in% c("AIEC", "ATEC", "DAEC", "EAEC", "EHEC", "EIEC", "EPEC", "ETEC", "NMEC", "STEC", "UPEC")
@ -799,7 +803,7 @@ exec_as.mo <- function(x,
perl = TRUE)), uncertainty = -1)
next
}
if (x_backup_without_spp[i] %like_case% "haemoly.*strep") {
if (x_backup_without_spp[i] %like_case% "ha?emoly.*strep") {
# Haemolytic streptococci in different languages
x[i] <- lookup(mo == "B_STRPT_HAEM", uncertainty = -1)
next
@ -895,7 +899,7 @@ exec_as.mo <- function(x,
# (at this point the latest reference_df has also been checked)
x[i] <- lookup(mo == "UNKNOWN")
if (initial_search == TRUE) {
failures <- c(failures, x_backup[i])
failures <- c(failures, x_backup_untouched[i])
}
next
}
@ -909,20 +913,12 @@ exec_as.mo <- function(x,
d.x_withspaces_start_end,
e.x_withspaces_start_only,
f.x_withspaces_end_only,
g.x_backup_without_spp,
h.x_species,
i.x_trimmed_species) {
g.x_backup_without_spp) {
# FIRST TRY FULLNAMES AND CODES ----
# if only genus is available, return only genus
if (all(c(x[i], b.x_trimmed) %unlike_case% " ")) {
found <- lookup(fullname_lower %in% c(h.x_species, i.x_trimmed_species),
haystack = data_to_check)
if (!is.na(found)) {
x[i] <- found[1L]
return(x[i])
}
if (nchar(g.x_backup_without_spp) >= 6) {
found <- lookup(fullname_lower %like_case% paste0("^", unregex(g.x_backup_without_spp), "[a-z]+"),
haystack = data_to_check)
@ -1420,18 +1416,15 @@ exec_as.mo <- function(x,
d.x_withspaces_start_end = x_withspaces_start_end[i],
e.x_withspaces_start_only = x_withspaces_start_only[i],
f.x_withspaces_end_only = x_withspaces_end_only[i],
g.x_backup_without_spp = x_backup_without_spp[i],
h.x_species = x_species[i],
i.x_trimmed_species = x_trimmed_species[i])
g.x_backup_without_spp = x_backup_without_spp[i])
if (!empty_result(x[i])) {
next
}
# no results found: make them UNKNOWN ----
x[i] <- lookup(mo == "UNKNOWN", uncertainty = -1)
if (initial_search == TRUE) {
failures <- c(failures, x_backup[i])
failures <- c(failures, x_backup_untouched[i])
}
}
@ -1476,14 +1469,22 @@ exec_as.mo <- function(x,
if (NROW(uncertainties) > 0 & initial_search == TRUE) {
uncertainties <- as.list(pm_distinct(uncertainties, input, .keep_all = TRUE))
pkg_env$mo_uncertainties <- uncertainties
plural <- c("", "it", "was")
if (length(uncertainties$input) > 1) {
plural <- c("s", "them", "were")
if (message_not_thrown_before("as.mo", "uncertainties", uncertainties$input)) {
plural <- c("", "this")
if (length(uncertainties$input) > 1) {
plural <- c("s", "these uncertainties")
}
if (length(uncertainties$input) <= 3) {
examples <- vector_and(paste0('"', uncertainties$input,
'" (assuming ', font_italic(uncertainties$fullname, collapse = NULL), ")"),
quotes = FALSE)
} else {
examples <- paste0(nr2char(length(uncertainties$input)), " microorganism", plural[1])
}
msg <- paste0("Function `as.mo()` is uncertain about ", examples,
". Run `mo_uncertainties()` to review ", plural[2], ".")
message_(msg)
}
msg <- paste0("Translation is uncertain of ", nr2char(length(uncertainties$input)), " microorganism", plural[1],
". Use `mo_uncertainties()` to review ", plural[2], ".")
message_(msg)
}
x[already_known] <- x_known
}
@ -1495,20 +1496,23 @@ exec_as.mo <- function(x,
# - Becker et al. 2014, PMID 25278577
# - Becker et al. 2019, PMID 30872103
# - Becker et al. 2020, PMID 32056452
post_Becker <- character(0) # 2020-10-20 currently all are mentioned in above papers (otherwise uncomment the section below)
post_Becker <- c("caledonicus", "canis", "durrellii", "lloydii", "roterodami")
# nolint start
# if (any(x %in% MO_lookup[which(MO_lookup$species %in% post_Becker), property])) {
# warning_("Becker ", font_italic("et al."), " (2014, 2019) does not contain these species named after their publication: ",
# font_italic(paste("S.",
# sort(mo_species(unique(x[x %in% MO_lookup[which(MO_lookup$species %in% post_Becker), property]]))),
# collapse = ", ")),
# ".",
# call = FALSE,
# immediate = TRUE)
# }
# comment below code if all staphylococcal species are categorised as CoNS/CoPS
if (any(x %in% MO_lookup[which(MO_lookup$species %in% post_Becker), property])) {
if (message_not_thrown_before("as.mo", "becker")) {
warning_("Becker ", font_italic("et al."), " (2014, 2019, 2020) does not contain these species named after their publication: ",
font_italic(paste("S.",
sort(mo_species(unique(x[x %in% MO_lookup[which(MO_lookup$species %in% post_Becker), property]]))),
collapse = ", ")),
". Categorisation to CoNS/CoPS was taken from the original scientific publication(s).",
call = FALSE,
immediate = TRUE)
}
}
# nolint end
# 'MO_CONS' and 'MO_COPS' are <mo> vectors created in R/zzz.R
CoNS <- MO_lookup[which(MO_lookup$mo %in% MO_CONS), property, drop = TRUE]
x[x %in% CoNS] <- lookup(mo == "B_STPHY_CONS", uncertainty = -1)
@ -1912,7 +1916,7 @@ print.mo_uncertainties <- function(x, ...) {
txt <- paste(txt,
paste0(
strwrap(
paste0(font_red('"', x[i, ]$input, '"', collapse = ""),
paste0('"', x[i, ]$input, '"',
" -> ",
paste0(font_bold(font_italic(x[i, ]$fullname)),
ifelse(!is.na(x[i, ]$renamed_to), paste(", renamed to", font_italic(x[i, ]$renamed_to)), ""),
@ -2043,6 +2047,8 @@ parse_and_convert <- function(x) {
}
replace_old_mo_codes <- function(x, property) {
# this function transform old MO codes to current codes, such as:
# B_ESCH_COL (AMR v0.5.0) -> B_ESCHR_COLI
ind <- x %like_case% "^[A-Z]_[A-Z_]+$" & !x %in% MO_lookup$mo
if (any(ind)) {
# get the ones that match
@ -2062,6 +2068,12 @@ replace_old_mo_codes <- function(x, property) {
MO_lookup$fullname_lower %like_case% name]
if (length(results) > 1) {
all_direct_matches <<- FALSE
} else if (length(results) == 0) {
# not found, so now search in old taxonomic names
results <- MO.old_lookup$fullname_new[MO.old_lookup$fullname_lower %like% name]
if (length(results) > 0) {
results <- MO_lookup$mo[match(results, MO_lookup$fullname)]
}
}
results[1L]
}), use.names = FALSE)
@ -2069,6 +2081,8 @@ replace_old_mo_codes <- function(x, property) {
# assign on places where a match was found
x[ind] <- solved
n_matched <- length(affected[!is.na(affected)])
n_solved <- length(affected[!is.na(solved)])
n_unsolved <- length(affected[is.na(solved)])
n_unique <- length(affected_unique[!is.na(affected_unique)])
if (n_unique < n_matched) {
n_unique <- paste0(n_unique, " unique, ")
@ -2082,12 +2096,17 @@ replace_old_mo_codes <- function(x, property) {
"Please update your MO codes with `as.mo()` to increase speed."),
call = FALSE)
} else {
warning_(paste0(n_matched, " old MO code", ifelse(n_matched == 1, "", "s"),
" (", n_unique, "from a previous AMR package version) ",
ifelse(n_matched == 1, "was", "were"),
warning_(paste0("The input contained ", n_matched,
" old MO code", ifelse(n_matched == 1, "", "s"),
" (", n_unique, "from a previous AMR package version). ",
n_solved, " old MO code", ifelse(n_solved == 1, "", "s"),
ifelse(n_solved == 1, " was", " were"),
ifelse(all_direct_matches, " updated ", font_bold(" guessed ")),
"to ", ifelse(n_matched == 1, "a ", ""),
"currently used MO code", ifelse(n_matched == 1, "", "s"), "."),
"to ", ifelse(n_solved == 1, "a ", ""),
"currently used MO code", ifelse(n_solved == 1, "", "s"),
ifelse(n_unsolved > 0,
paste0(" and ", n_unsolved, " old MO code", ifelse(n_unsolved == 1, "", "s"), " could not be updated."),
".")),
call = FALSE)
}
}

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -27,7 +27,7 @@
#'
#' This algorithm is used by [as.mo()] and all the [`mo_*`][mo_property()] functions to determine the most probable match of taxonomic records based on user input.
#' @inheritSection lifecycle Stable Lifecycle
#' @author Matthijs S. Berends
#' @author Dr. Matthijs Berends
#' @param x Any user input value(s)
#' @param n A full taxonomic name, that exists in [`microorganisms$fullname`][microorganisms]
#' @section Matching Score for Microorganisms:

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -29,7 +29,7 @@
#' @inheritSection lifecycle Stable Lifecycle
#' @param x any [character] (vector) that can be coerced to a valid microorganism code with [as.mo()]. Can be left blank for auto-guessing the column containing microorganism codes if used in a data set, see *Examples*.
#' @param property one of the column names of the [microorganisms] data set: `r vector_or(colnames(microorganisms), sort = FALSE, quotes = TRUE)`, or must be `"shortname"`
#' @param language language of the returned text, defaults to system language (see [get_locale()]) and can be overwritten by setting the option `AMR_locale`, e.g. `options(AMR_locale = "de")`, see [translate]. Also used to translate text like "no growth". Use `language = NULL` or `language = ""` to prevent translation.
#' @param language language of the returned text, defaults to system language (see [get_AMR_locale()]) and can be overwritten by setting the option `AMR_locale`, e.g. `options(AMR_locale = "de")`, see [translate]. Also used to translate text like "no growth". Use `language = NULL` or `language = ""` to prevent translation.
#' @param ... other arguments passed on to [as.mo()], such as 'allow_uncertain' and 'ignore_pattern'
#' @param ab any (vector of) text that can be coerced to a valid antibiotic code with [as.ab()]
#' @param open browse the URL using [`browseURL()`][utils::browseURL()]
@ -46,7 +46,7 @@
#'
#' Determination of yeasts - [mo_is_yeast()] - will be based on the taxonomic kingdom and class. *Budding yeasts* are fungi of the phylum Ascomycetes, class Saccharomycetes (also called Hemiascomycetes). *True yeasts* are aggregated into the underlying order Saccharomycetales. Thus, for all microorganisms that are fungi and member of the taxonomic class Saccharomycetes, the function will return `TRUE`. It returns `FALSE` otherwise (except when the input is `NA` or the MO code is `UNKNOWN`).
#'
#' Intrinsic resistance - [mo_is_intrinsic_resistant()] - will be determined based on the [intrinsic_resistant] data set, which is based on `r format_eucast_version_nr(3.2)`. The [mo_is_intrinsic_resistant()] functions can be vectorised over arguments `x` (input for microorganisms) and over `ab` (input for antibiotics).
#' Intrinsic resistance - [mo_is_intrinsic_resistant()] - will be determined based on the [intrinsic_resistant] data set, which is based on `r format_eucast_version_nr(3.3)`. The [mo_is_intrinsic_resistant()] functions can be vectorised over arguments `x` (input for microorganisms) and over `ab` (input for antibiotics).
#'
#' All output [will be translated][translate] where possible.
#'
@ -96,6 +96,7 @@
#' mo_ref("E. coli") # "Castellani et al., 1919"
#' mo_authors("E. coli") # "Castellani et al."
#' mo_year("E. coli") # 1919
#' mo_lpsn("E. coli") # 776057 (LPSN record ID)
#'
#' # abbreviations known in the field -----------------------------------------
#' mo_genus("MRSA") # "Staphylococcus"
@ -169,7 +170,7 @@
#' mo_info("E. coli")
#' }
#' }
mo_name <- function(x, language = get_locale(), ...) {
mo_name <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_name")
@ -189,7 +190,7 @@ mo_fullname <- mo_name
#' @rdname mo_property
#' @export
mo_shortname <- function(x, language = get_locale(), ...) {
mo_shortname <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_shortname")
@ -216,9 +217,9 @@ mo_shortname <- function(x, language = get_locale(), ...) {
shortnames[shortnames == "S. coagulase-negative"] <- "CoNS"
shortnames[shortnames == "S. coagulase-positive"] <- "CoPS"
# exceptions for streptococci: Group A Streptococcus -> GAS
shortnames[shortnames %like% "S. group [ABCDFGHK]"] <- paste0("G", gsub("S. group ([ABCDFGHK])", "\\1", shortnames[shortnames %like% "S. group [ABCDFGHK]"]), "S")
shortnames[shortnames %like% "S. group [ABCDFGHK]"] <- paste0("G", gsub("S. group ([ABCDFGHK])", "\\1", shortnames[shortnames %like% "S. group [ABCDFGHK]"], perl = TRUE), "S")
# unknown species etc.
shortnames[shortnames %like% "unknown"] <- paste0("(", trimws(gsub("[^a-zA-Z -]", "", shortnames[shortnames %like% "unknown"])), ")")
shortnames[shortnames %like% "unknown"] <- paste0("(", trimws(gsub("[^a-zA-Z -]", "", shortnames[shortnames %like% "unknown"], perl = TRUE)), ")")
shortnames[is.na(x.mo)] <- NA_character_
load_mo_failures_uncertainties_renamed(metadata)
@ -229,7 +230,7 @@ mo_shortname <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_subspecies <- function(x, language = get_locale(), ...) {
mo_subspecies <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_subspecies")
@ -242,7 +243,7 @@ mo_subspecies <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_species <- function(x, language = get_locale(), ...) {
mo_species <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_species")
@ -255,7 +256,7 @@ mo_species <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_genus <- function(x, language = get_locale(), ...) {
mo_genus <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_genus")
@ -268,7 +269,7 @@ mo_genus <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_family <- function(x, language = get_locale(), ...) {
mo_family <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_family")
@ -281,7 +282,7 @@ mo_family <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_order <- function(x, language = get_locale(), ...) {
mo_order <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_order")
@ -294,7 +295,7 @@ mo_order <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_class <- function(x, language = get_locale(), ...) {
mo_class <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_class")
@ -307,7 +308,7 @@ mo_class <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_phylum <- function(x, language = get_locale(), ...) {
mo_phylum <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_phylum")
@ -320,7 +321,7 @@ mo_phylum <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_kingdom <- function(x, language = get_locale(), ...) {
mo_kingdom <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_kingdom")
@ -337,7 +338,7 @@ mo_domain <- mo_kingdom
#' @rdname mo_property
#' @export
mo_type <- function(x, language = get_locale(), ...) {
mo_type <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_type")
@ -353,7 +354,7 @@ mo_type <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_gramstain <- function(x, language = get_locale(), ...) {
mo_gramstain <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_gramstain")
@ -384,7 +385,7 @@ mo_gramstain <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_is_gram_negative <- function(x, language = get_locale(), ...) {
mo_is_gram_negative <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_is_gram_negative")
@ -403,7 +404,7 @@ mo_is_gram_negative <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_is_gram_positive <- function(x, language = get_locale(), ...) {
mo_is_gram_positive <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_is_gram_positive")
@ -422,7 +423,7 @@ mo_is_gram_positive <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_is_yeast <- function(x, language = get_locale(), ...) {
mo_is_yeast <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_is_yeast")
@ -448,7 +449,7 @@ mo_is_yeast <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_is_intrinsic_resistant <- function(x, ab, language = get_locale(), ...) {
mo_is_intrinsic_resistant <- function(x, ab, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_is_intrinsic_resistant")
@ -470,9 +471,9 @@ mo_is_intrinsic_resistant <- function(x, ab, language = get_locale(), ...) {
}
# show used version number once per session (pkg_env will reload every session)
if (message_not_thrown_before("intrinsic_resistant_version.mo", entire_session = TRUE)) {
if (message_not_thrown_before("mo_is_intrinsic_resistant", "version.mo", entire_session = TRUE)) {
message_("Determining intrinsic resistance based on ",
format_eucast_version_nr(3.2, markdown = FALSE), ". ",
format_eucast_version_nr(3.3, markdown = FALSE), ". ",
font_red("This note will be shown once per session."))
}
@ -482,7 +483,7 @@ mo_is_intrinsic_resistant <- function(x, ab, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_snomed <- function(x, language = get_locale(), ...) {
mo_snomed <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_snomed")
@ -495,7 +496,7 @@ mo_snomed <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_ref <- function(x, language = get_locale(), ...) {
mo_ref <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_ref")
@ -508,7 +509,7 @@ mo_ref <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_authors <- function(x, language = get_locale(), ...) {
mo_authors <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_authors")
@ -518,13 +519,13 @@ mo_authors <- function(x, language = get_locale(), ...) {
x <- mo_validate(x = x, property = "ref", language = language, ...)
# remove last 4 digits and presumably the comma and space that preceed them
x[!is.na(x)] <- gsub(",? ?[0-9]{4}", "", x[!is.na(x)])
x[!is.na(x)] <- gsub(",? ?[0-9]{4}", "", x[!is.na(x)], perl = TRUE)
suppressWarnings(x)
}
#' @rdname mo_property
#' @export
mo_year <- function(x, language = get_locale(), ...) {
mo_year <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_year")
@ -534,13 +535,26 @@ mo_year <- function(x, language = get_locale(), ...) {
x <- mo_validate(x = x, property = "ref", language = language, ...)
# get last 4 digits
x[!is.na(x)] <- gsub(".*([0-9]{4})$", "\\1", x[!is.na(x)])
x[!is.na(x)] <- gsub(".*([0-9]{4})$", "\\1", x[!is.na(x)], perl = TRUE)
suppressWarnings(as.integer(x))
}
#' @rdname mo_property
#' @export
mo_rank <- function(x, language = get_locale(), ...) {
mo_lpsn <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_rank")
}
meet_criteria(x, allow_NA = TRUE)
meet_criteria(language, has_length = 1, is_in = c(LANGUAGES_SUPPORTED, ""), allow_NULL = TRUE, allow_NA = TRUE)
mo_validate(x = x, property = "species_id", language = language, ...)
}
#' @rdname mo_property
#' @export
mo_rank <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_rank")
@ -553,7 +567,7 @@ mo_rank <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_taxonomy <- function(x, language = get_locale(), ...) {
mo_taxonomy <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_taxonomy")
@ -564,22 +578,22 @@ mo_taxonomy <- function(x, language = get_locale(), ...) {
x <- as.mo(x, language = language, ...)
metadata <- get_mo_failures_uncertainties_renamed()
result <- list(kingdom = mo_kingdom(x, language = language),
phylum = mo_phylum(x, language = language),
class = mo_class(x, language = language),
order = mo_order(x, language = language),
family = mo_family(x, language = language),
genus = mo_genus(x, language = language),
species = mo_species(x, language = language),
subspecies = mo_subspecies(x, language = language))
out <- list(kingdom = mo_kingdom(x, language = language),
phylum = mo_phylum(x, language = language),
class = mo_class(x, language = language),
order = mo_order(x, language = language),
family = mo_family(x, language = language),
genus = mo_genus(x, language = language),
species = mo_species(x, language = language),
subspecies = mo_subspecies(x, language = language))
load_mo_failures_uncertainties_renamed(metadata)
result
out
}
#' @rdname mo_property
#' @export
mo_synonyms <- function(x, language = get_locale(), ...) {
mo_synonyms <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_synonyms")
@ -612,7 +626,7 @@ mo_synonyms <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_info <- function(x, language = get_locale(), ...) {
mo_info <- function(x, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_info")
@ -643,7 +657,7 @@ mo_info <- function(x, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_url <- function(x, open = FALSE, language = get_locale(), ...) {
mo_url <- function(x, open = FALSE, language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_url")
@ -652,31 +666,23 @@ mo_url <- function(x, open = FALSE, language = get_locale(), ...) {
meet_criteria(open, allow_class = "logical", has_length = 1)
meet_criteria(language, has_length = 1, is_in = c(LANGUAGES_SUPPORTED, ""), allow_NULL = TRUE, allow_NA = TRUE)
mo <- as.mo(x = x, language = language, ... = ...)
mo_names <- mo_name(mo)
x.mo <- as.mo(x = x, language = language, ... = ...)
metadata <- get_mo_failures_uncertainties_renamed()
df <- data.frame(mo, stringsAsFactors = FALSE) %pm>%
pm_left_join(pm_select(microorganisms, mo, source, species_id), by = "mo")
df$url <- ifelse(df$source == "CoL",
paste0(CATALOGUE_OF_LIFE$url_CoL, "details/species/id/", df$species_id, "/"),
NA_character_)
df <- microorganisms[match(x.mo, microorganisms$mo), c("mo", "fullname", "source", "kingdom", "rank")]
df$url <- ifelse(df$source == "LPSN",
paste0(CATALOGUE_OF_LIFE$url_LPSN, "/species/", gsub(" ", "-", tolower(df$fullname), fixed = TRUE)),
paste0(CATALOGUE_OF_LIFE$url_CoL, "/data/search?type=EXACT&q=", gsub(" ", "%20", df$fullname, fixed = TRUE)))
genera <- which(df$kingdom == "Bacteria" & df$rank == "genus")
df$url[genera] <- gsub("/species/", "/genus/", df$url[genera], fixed = TRUE)
subsp <- which(df$kingdom == "Bacteria" & df$rank %in% c("subsp.", "infraspecies"))
df$url[subsp] <- gsub("/species/", "/subspecies/", df$url[subsp], fixed = TRUE)
u <- df$url
u[mo_kingdom(mo) == "Bacteria"] <- paste0(CATALOGUE_OF_LIFE$url_LPSN, "/species/", gsub(" ", "-", tolower(mo_names), fixed = TRUE))
u[mo_kingdom(mo) == "Bacteria" & mo_rank(mo) == "genus"] <- gsub("/species/",
"/genus/",
u[mo_kingdom(mo) == "Bacteria" & mo_rank(mo) == "genus"],
fixed = TRUE)
u[mo_kingdom(mo) == "Bacteria" &
mo_rank(mo) %in% c("subsp.", "infraspecies")] <- gsub("/species/",
"/subspecies/",
u[mo_kingdom(mo) == "Bacteria" &
mo_rank(mo) %in% c("subsp.", "infraspecies")],
fixed = TRUE)
names(u) <- df$fullname
names(u) <- mo_names
if (open == TRUE) {
if (isTRUE(open)) {
if (length(u) > 1) {
warning_("Only the first URL will be opened, as `browseURL()` only suports one string.")
}
@ -690,7 +696,7 @@ mo_url <- function(x, open = FALSE, language = get_locale(), ...) {
#' @rdname mo_property
#' @export
mo_property <- function(x, property = "fullname", language = get_locale(), ...) {
mo_property <- function(x, property = "fullname", language = get_AMR_locale(), ...) {
if (missing(x)) {
# this tries to find the data and an <mo> column
x <- find_mo_col(fn = "mo_property")
@ -732,6 +738,8 @@ mo_validate <- function(x, property, language, ...) {
if (property == "mo") {
return(set_clean_class(x, new_class = c("mo", "character")))
} else if (property == "species_id") {
return(as.double(x))
} else if (property == "snomed") {
return(as.double(eval(parse(text = x))))
} else {

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -90,7 +90,7 @@ pca <- function(x,
# this is to support quoted variables: df %pm>% pca("mycol1", "mycol2")
new_list[[i]] <- x[, new_list[[i]]]
} else {
# remove item - it's a argument like `center`
# remove item - it's an argument like `center`
new_list[[i]] <- NULL
}
}

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -26,16 +26,16 @@
#' Plotting for Classes `rsi`, `mic` and `disk`
#'
#' Functions to plot classes `rsi`, `mic` and `disk`, with support for base \R and `ggplot2`.
#' @inheritSection lifecycle Maturing Lifecycle
#' @inheritSection lifecycle Stable Lifecycle
#' @inheritSection AMR Read more on Our Website!
#' @param x,object values created with [as.mic()], [as.disk()] or [as.rsi()]
#' @param x,object values created with [as.mic()], [as.disk()] or [as.rsi()] (or their `random_*` variants, such as [random_mic()])
#' @param mo any (vector of) text that can be coerced to a valid microorganism code with [as.mo()]
#' @param ab any (vector of) text that can be coerced to a valid antimicrobial code with [as.ab()]
#' @param guideline interpretation guideline to use, defaults to the latest included EUCAST guideline, see *Details*
#' @param main,title title of the plot
#' @param xlab,ylab axis title
#' @param colours_RSI colours to use for filling in the bars, must be a vector of three values (in the order R, S and I). The default colours are colour-blind friendly.
#' @param language language to be used to translate 'Susceptible', 'Increased exposure'/'Intermediate' and 'Resistant', defaults to system language (see [get_locale()]) and can be overwritten by setting the option `AMR_locale`, e.g. `options(AMR_locale = "de")`, see [translate]. Use `language = NULL` or `language = ""` to prevent translation.
#' @param language language to be used to translate 'Susceptible', 'Increased exposure'/'Intermediate' and 'Resistant', defaults to system language (see [get_AMR_locale()]) and can be overwritten by setting the option `AMR_locale`, e.g. `options(AMR_locale = "de")`, see [translate]. Use `language = NULL` or `language = ""` to prevent translation.
#' @param expand a [logical] to indicate whether the range on the x axis should be expanded between the lowest and highest value. For MIC values, intermediate values will be factors of 2 starting from the highest MIC value. For disk diameters, the whole diameter range will be filled.
#' @details
#' The interpretation of "I" will be named "Increased exposure" for all EUCAST guidelines since 2019, and will be named "Intermediate" in all other cases.
@ -46,7 +46,9 @@
#' @name plot
#' @rdname plot
#' @return The `autoplot()` functions return a [`ggplot`][ggplot2::ggplot()] model that is extendible with any `ggplot2` function.
#' @param ... arguments passed on to [as.rsi()]
#'
#' The `fortify()` functions return a [data.frame] as an extension for usage in the [ggplot2::ggplot()] function.
#' @param ... arguments passed on to methods
#' @examples
#' some_mic_values <- random_mic(size = 100)
#' some_disk_values <- random_disk(size = 100, mo = "Escherichia coli", ab = "cipro")
@ -81,7 +83,7 @@ plot.mic <- function(x,
ylab = "Frequency",
xlab = "Minimum Inhibitory Concentration (mg/L)",
colours_RSI = c("#ED553B", "#3CAEA3", "#F6D55C"),
language = get_locale(),
language = get_AMR_locale(),
expand = TRUE,
...) {
meet_criteria(mo, allow_class = c("mo", "character"), allow_NULL = TRUE)
@ -144,6 +146,7 @@ plot.mic <- function(x,
legend_txt <- c(legend_txt, "Resistant")
legend_col <- c(legend_col, colours_RSI[1])
}
legend("top",
x.intersp = 0.5,
legend = translate_AMR(legend_txt, language = language),
@ -167,7 +170,7 @@ barplot.mic <- function(height,
ylab = "Frequency",
xlab = "Minimum Inhibitory Concentration (mg/L)",
colours_RSI = c("#ED553B", "#3CAEA3", "#F6D55C"),
language = get_locale(),
language = get_AMR_locale(),
expand = TRUE,
...) {
meet_criteria(main, allow_class = "character", has_length = 1, allow_NULL = TRUE)
@ -212,7 +215,7 @@ autoplot.mic <- function(object,
ylab = "Frequency",
xlab = "Minimum Inhibitory Concentration (mg/L)",
colours_RSI = c("#ED553B", "#3CAEA3", "#F6D55C"),
language = get_locale(),
language = get_AMR_locale(),
expand = TRUE,
...) {
stop_ifnot_installed("ggplot2")
@ -283,6 +286,13 @@ autoplot.mic <- function(object,
ggplot2::labs(title = title, x = xlab, y = ylab, subtitle = cols_sub$sub)
}
#' @method fortify mic
#' @rdname plot
# will be exported using s3_register() in R/zzz.R
fortify.mic <- function(object, ...) {
stats::setNames(as.data.frame(plot_prepare_table(object, expand = FALSE)),
c("x", "y"))
}
#' @method plot disk
#' @export
@ -296,7 +306,7 @@ plot.disk <- function(x,
ab = NULL,
guideline = "EUCAST",
colours_RSI = c("#ED553B", "#3CAEA3", "#F6D55C"),
language = get_locale(),
language = get_AMR_locale(),
expand = TRUE,
...) {
meet_criteria(main, allow_class = "character", has_length = 1, allow_NULL = TRUE)
@ -383,7 +393,7 @@ barplot.disk <- function(height,
ab = NULL,
guideline = "EUCAST",
colours_RSI = c("#ED553B", "#3CAEA3", "#F6D55C"),
language = get_locale(),
language = get_AMR_locale(),
expand = TRUE,
...) {
meet_criteria(main, allow_class = "character", has_length = 1, allow_NULL = TRUE)
@ -428,7 +438,7 @@ autoplot.disk <- function(object,
xlab = "Disk diffusion diameter (mm)",
guideline = "EUCAST",
colours_RSI = c("#ED553B", "#3CAEA3", "#F6D55C"),
language = get_locale(),
language = get_AMR_locale(),
expand = TRUE,
...) {
stop_ifnot_installed("ggplot2")
@ -500,6 +510,14 @@ autoplot.disk <- function(object,
ggplot2::labs(title = title, x = xlab, y = ylab, subtitle = cols_sub$sub)
}
#' @method fortify disk
#' @rdname plot
# will be exported using s3_register() in R/zzz.R
fortify.disk <- function(object, ...) {
stats::setNames(as.data.frame(plot_prepare_table(object, expand = FALSE)),
c("x", "y"))
}
#' @method plot rsi
#' @export
#' @importFrom graphics plot text axis
@ -562,7 +580,7 @@ barplot.rsi <- function(height,
xlab = "Antimicrobial Interpretation",
ylab = "Frequency",
colours_RSI = c("#ED553B", "#3CAEA3", "#F6D55C"),
language = get_locale(),
language = get_AMR_locale(),
expand = TRUE,
...) {
meet_criteria(xlab, allow_class = "character", has_length = 1)
@ -606,7 +624,7 @@ autoplot.rsi <- function(object,
xlab = "Antimicrobial Interpretation",
ylab = "Frequency",
colours_RSI = c("#ED553B", "#3CAEA3", "#F6D55C"),
language = get_locale(),
language = get_AMR_locale(),
...) {
stop_ifnot_installed("ggplot2")
meet_criteria(title, allow_class = "character", allow_NULL = TRUE)
@ -646,6 +664,14 @@ autoplot.rsi <- function(object,
ggplot2::theme(legend.position = "none")
}
#' @method fortify rsi
#' @rdname plot
# will be exported using s3_register() in R/zzz.R
fortify.rsi <- function(object, ...) {
stats::setNames(as.data.frame(table(object)),
c("x", "y"))
}
plot_prepare_table <- function(x, expand) {
x <- x[!is.na(x)]
stop_if(length(x) == 0, "no observations to plot", call = FALSE)

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -277,7 +277,7 @@ proportion_S <- function(...,
#' @export
proportion_df <- function(data,
translate_ab = "name",
language = get_locale(),
language = get_AMR_locale(),
minimum = 30,
as_percent = FALSE,
combine_SI = TRUE,

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

79
R/rsi.R
View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -35,10 +35,10 @@
#' @inheritParams first_isolate
#' @param guideline defaults to the latest included EUCAST guideline, see *Details* for all options
#' @param conserve_capped_values a [logical] to indicate that MIC values starting with `">"` (but not `">="`) must always return "R" , and that MIC values starting with `"<"` (but not `"<="`) must always return "S"
#' @param add_intrinsic_resistance *(only useful when using a EUCAST guideline)* a [logical] to indicate whether intrinsic antibiotic resistance must also be considered for applicable bug-drug combinations, meaning that e.g. ampicillin will always return "R" in *Klebsiella* species. Determination is based on the [intrinsic_resistant] data set, that itself is based on `r format_eucast_version_nr(3.2)`.
#' @param add_intrinsic_resistance *(only useful when using a EUCAST guideline)* a [logical] to indicate whether intrinsic antibiotic resistance must also be considered for applicable bug-drug combinations, meaning that e.g. ampicillin will always return "R" in *Klebsiella* species. Determination is based on the [intrinsic_resistant] data set, that itself is based on `r format_eucast_version_nr(3.3)`.
#' @param reference_data a [data.frame] to be used for interpretation, which defaults to the [rsi_translation] data set. Changing this argument allows for using own interpretation guidelines. This argument must contain a data set that is equal in structure to the [rsi_translation] data set (same column names and column types). Please note that the `guideline` argument will be ignored when `reference_data` is manually set.
#' @param threshold maximum fraction of invalid antimicrobial interpretations of `x`, see *Examples*
#' @param ... for using on a [data.frame]: names of columns to apply [as.rsi()] on (supports tidy selection like `AMX:VAN`). Otherwise: arguments passed on to methods.
#' @param ... for using on a [data.frame]: names of columns to apply [as.rsi()] on (supports tidy selection such as `column1:column4`). Otherwise: arguments passed on to methods.
#' @details
#' ## How it Works
#'
@ -61,7 +61,7 @@
#' your_data %>% mutate(across(where(is.disk), as.rsi)) # since dplyr 1.0.0
#' ```
#'
#' 4. For **interpreting a complete data set**, with automatic determination of MIC values, disk diffusion diameters, microorganism names or codes, and antimicrobial test results. This is done very simply by running `as.rsi(data)`.
#' 4. For **interpreting a complete data set**, with automatic determination of MIC values, disk diffusion diameters, microorganism names or codes, and antimicrobial test results. This is done very simply by running `as.rsi(your_data)`.
#'
#' ## Supported Guidelines
#'
@ -75,7 +75,7 @@
#'
#' ## Machine-Readable Interpretation Guidelines
#'
#' The repository of this package [contains a machine-readable version](https://github.com/msberends/AMR/blob/master/data-raw/rsi_translation.txt) of all guidelines. This is a CSV file consisting of `r format(nrow(AMR::rsi_translation), big.mark = ",")` rows and `r ncol(AMR::rsi_translation)` columns. This file is machine-readable, since it contains one row for every unique combination of the test method (MIC or disk diffusion), the antimicrobial agent and the microorganism. **This allows for easy implementation of these rules in laboratory information systems (LIS)**. Note that it only contains interpretation guidelines for humans - interpretation guidelines from CLSI for animals were removed.
#' The repository of this package [contains a machine-readable version](https://github.com/msberends/AMR/blob/main/data-raw/rsi_translation.txt) of all guidelines. This is a CSV file consisting of `r format(nrow(AMR::rsi_translation), big.mark = ",")` rows and `r ncol(AMR::rsi_translation)` columns. This file is machine-readable, since it contains one row for every unique combination of the test method (MIC or disk diffusion), the antimicrobial agent and the microorganism. **This allows for easy implementation of these rules in laboratory information systems (LIS)**. Note that it only contains interpretation guidelines for humans - interpretation guidelines from CLSI for animals were removed.
#'
#' ## Other
#'
@ -188,6 +188,12 @@ as.rsi <- function(x, ...) {
UseMethod("as.rsi")
}
#' @rdname as.rsi
#' @details `NA_rsi_` is a missing value of the new `<rsi>` class.
#' @export
NA_rsi_ <- set_clean_class(factor(NA, levels = c("S", "I", "R"), ordered = TRUE),
new_class = c("rsi", "ordered", "factor"))
#' @rdname as.rsi
#' @export
is.rsi <- function(x) {
@ -257,12 +263,12 @@ as.rsi.default <- function(x, ...) {
return(x)
}
if (inherits(x, c("integer", "numeric", "double")) && all(x %in% c(1:3, NA))) {
x.bak <- x
x <- as.character(x) # this is needed to prevent the vctrs pkg from throwing an error
x.bak <- x
x <- as.character(x) # this is needed to prevent the vctrs pkg from throwing an error
if (inherits(x.bak, c("integer", "numeric", "double")) && all(x %in% c(1:3, NA))) {
# support haven package for importing e.g., from SPSS - it adds the 'labels' attribute
lbls <- attributes(x)$labels
lbls <- attributes(x.bak)$labels
if (!is.null(lbls) && all(c("R", "S", "I") %in% names(lbls)) && all(c(1:3) %in% lbls)) {
x[x.bak == 1] <- names(lbls[lbls == 1])
x[x.bak == 2] <- names(lbls[lbls == 2])
@ -278,9 +284,9 @@ as.rsi.default <- function(x, ...) {
if (all(x %unlike% "(R|S|I)", na.rm = TRUE)) {
# check if they are actually MICs or disks
if (all_valid_mics(x)) {
warning_("The input seems to be MIC values. Transform them with `as.mic()` before running `as.rsi()` to interpret them.")
warning_("The input seems to contain MIC values. You can transform them with `as.mic()` before running `as.rsi()` to interpret them.", call = FALSE)
} else if (all_valid_disks(x)) {
warning_("The input seems to be disk diffusion values. Transform them with `as.disk()` before running `as.rsi()` to interpret them.")
warning_("The input seems to contain disk diffusion values. You can transform them with `as.disk()` before running `as.rsi()` to interpret them.", call = FALSE)
}
}
@ -303,24 +309,17 @@ as.rsi.default <- function(x, ...) {
x[x %like% "([^a-z]|^)res(is(tant)?)?"] <- "R"
x[x %like% "([^a-z]|^)sus(cep(tible)?)?"] <- "S"
x[x %like% "([^a-z]|^)int(er(mediate)?)?|incr.*exp"] <- "I"
# remove all spaces
x <- gsub(" +", "", x)
# remove all MIC-like values: numbers, operators and periods
x <- gsub("[0-9.,;:<=>]+", "", x)
# remove everything between brackets, and 'high' and 'low'
x <- gsub("([(].*[)])", "", x)
x <- gsub("(high|low)", "", x, ignore.case = TRUE)
# disallow more than 3 characters
x[nchar(x) > 3] <- NA
# remove other invalid characters
x <- gsub("[^rsiRSIHi]+", "", x, perl = TRUE)
# some labs now report "H" instead of "I" to not interfere with EUCAST prior to 2019
x <- gsub("H", "I", x, ignore.case = TRUE)
# set to capitals
x <- toupper(x)
# remove all invalid characters
x <- gsub("[^RSI]+", "", x)
# in cases of "S;S" keep S, but in case of "S;I" make it NA
x <- gsub("^S+$", "S", x)
x <- gsub("^I+$", "I", x)
x <- gsub("^R+$", "R", x)
x[!x %in% c("S", "I", "R")] <- NA
x[!x %in% c("S", "I", "R")] <- NA_character_
na_after <- length(x[is.na(x) | x == ""])
if (!isFALSE(list(...)$warn)) { # so as.rsi(..., warn = FALSE) will never throw a warning
@ -551,7 +550,7 @@ as.rsi.data.frame <- function(x,
x.bak <- x
for (i in seq_len(ncol(x))) {
# don't keep factors
# don't keep factors, overwriting them is hard
if (is.factor(x[, i, drop = TRUE])) {
x[, i] <- as.character(x[, i, drop = TRUE])
}
@ -605,7 +604,11 @@ as.rsi.data.frame <- function(x,
}
i <- 0
sel <- colnames(pm_select(x, ...))
if (tryCatch(length(list(...)) > 0, error = function(e) TRUE)) {
sel <- colnames(pm_select(x, ...))
} else {
sel <- colnames(x)
}
if (!is.null(col_mo)) {
sel <- sel[sel != col_mo]
}
@ -772,7 +775,7 @@ exec_as.rsi <- function(method,
guideline_coerced <- get_guideline(guideline, reference_data)
if (guideline_coerced != guideline) {
if (message_not_thrown_before("as.rsi")) {
if (message_not_thrown_before("as.rsi", "msg1")) {
message_("Using guideline ", font_bold(guideline_coerced), " as input for `guideline`.")
}
}
@ -796,7 +799,8 @@ exec_as.rsi <- function(method,
lookup_lancefield <- paste(mo_lancefield, ab)
lookup_other <- paste(mo_other, ab)
if (all(trans$uti == TRUE, na.rm = TRUE) & all(uti == FALSE)) {
if (length(unique(paste(trans$mo, trans$ab))) == length(unique(paste(trans$mo, trans$ab, trans$uti))) &&
any(trans$uti == TRUE, na.rm = TRUE) && all(uti == FALSE)) {
message_("WARNING.", add_fn = list(font_yellow, font_bold), as_note = FALSE)
warning_("Introducing NA: interpretation of ", font_bold(ab_name(ab, tolower = TRUE)), " for some microorganisms is only available for (uncomplicated) urinary tract infections (UTI). Use argument `uti` to set which isolates are from urine. See ?as.rsi.", call = FALSE)
warned <- TRUE
@ -810,7 +814,7 @@ exec_as.rsi <- function(method,
if (isTRUE(add_intrinsic_resistance) & is_intrinsic_r) {
if (guideline_coerced %unlike% "EUCAST") {
if (message_not_thrown_before("as.rsi2")) {
if (message_not_thrown_before("as.rsi", "msg2")) {
warning_("Using 'add_intrinsic_resistance' is only useful when using EUCAST guidelines, since the rules for intrinsic resistance are based on EUCAST.", call = FALSE)
}
} else {
@ -833,11 +837,11 @@ exec_as.rsi <- function(method,
get_record <- get_record %pm>%
# be as specific as possible (i.e. prefer species over genus):
# pm_desc(uti) = TRUE on top and FALSE on bottom
pm_arrange(pm_desc(uti), pm_desc(nchar(mo))) # 'uti' is a column in data set 'rsi_translation'
pm_arrange(pm_desc(uti), rank_index) # 'uti' is a column in data set 'rsi_translation'
} else {
get_record <- get_record %pm>%
pm_filter(uti == FALSE) %pm>% # 'uti' is a column in rsi_translation
pm_arrange(pm_desc(nchar(mo)))
pm_arrange(rank_index)
}
get_record <- get_record[1L, , drop = FALSE]
@ -848,21 +852,16 @@ exec_as.rsi <- function(method,
} else if (method == "mic") {
new_rsi[i] <- quick_case_when(isTRUE(conserve_capped_values) & x[i] %like% "^<[0-9]" ~ "S",
isTRUE(conserve_capped_values) & x[i] %like% "^>[0-9]" ~ "R",
# start interpreting: EUCAST uses <= S and > R, CLSI uses <=S and >= R
# these basically call `<=.mic()` and `>=.mic()`:
x[i] <= get_record$breakpoint_S ~ "S",
guideline_coerced %like% "EUCAST" & x[i] > get_record$breakpoint_R ~ "R",
guideline_coerced %like% "CLSI" & x[i] >= get_record$breakpoint_R ~ "R",
x[i] >= get_record$breakpoint_R ~ "R",
# return "I" when not match the bottom or top
!is.na(get_record$breakpoint_S) & !is.na(get_record$breakpoint_R) ~ "I",
# and NA otherwise
TRUE ~ NA_character_)
} else if (method == "disk") {
new_rsi[i] <- quick_case_when(isTRUE(as.double(x[i]) >= as.double(get_record$breakpoint_S)) ~ "S",
# start interpreting: EUCAST uses >= S and < R, CLSI uses >=S and <= R
guideline_coerced %like% "EUCAST" &
isTRUE(as.double(x[i]) < as.double(get_record$breakpoint_R)) ~ "R",
guideline_coerced %like% "CLSI" &
isTRUE(as.double(x[i]) <= as.double(get_record$breakpoint_R)) ~ "R",
isTRUE(as.double(x[i]) <= as.double(get_record$breakpoint_R)) ~ "R",
# return "I" when not match the bottom or top
!is.na(get_record$breakpoint_S) & !is.na(get_record$breakpoint_R) ~ "I",
# and NA otherwise
@ -874,7 +873,7 @@ exec_as.rsi <- function(method,
if (any_is_intrinsic_resistant & guideline_coerced %like% "EUCAST" & !isTRUE(add_intrinsic_resistance)) {
# found some intrinsic resistance, but was not applied
message_("WARNING.", add_fn = list(font_yellow, font_bold), as_note = FALSE)
if (message_not_thrown_before("as.rsi3")) {
if (message_not_thrown_before("as.rsi", "msg3")) {
warning_("Found intrinsic resistance in some bug/drug combinations, although it was not applied.\nUse `as.rsi(..., add_intrinsic_resistance = TRUE)` to apply it.", call = FALSE)
}
warned <- TRUE

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -202,7 +202,7 @@ rsi_calc <- function(...,
rsi_calc_df <- function(type, # "proportion", "count" or "both"
data,
translate_ab = "name",
language = get_locale(),
language = get_AMR_locale(),
minimum = 30,
as_percent = FALSE,
combine_SI = TRUE,
@ -344,6 +344,7 @@ rsi_calc_df <- function(type, # "proportion", "count" or "both"
}
rownames(out) <- NULL
class(out) <- c("rsi_df", class(out))
out
}

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -27,7 +27,7 @@
#' @export
rsi_df <- function(data,
translate_ab = "name",
language = get_locale(),
language = get_AMR_locale(),
minimum = 30,
as_percent = FALSE,
combine_SI = TRUE,

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

Binary file not shown.

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -27,9 +27,9 @@
#'
#' For language-dependent output of AMR functions, like [mo_name()], [mo_gramstain()], [mo_type()] and [ab_name()].
#' @inheritSection lifecycle Stable Lifecycle
#' @details Strings will be translated to foreign languages if they are defined in a local translation file. Additions to this file can be suggested at our repository. The file can be found here: <https://github.com/msberends/AMR/blob/master/data-raw/translations.tsv>. This file will be read by all functions where a translated output can be desired, like all [`mo_*`][mo_property()] functions (such as [mo_name()], [mo_gramstain()], [mo_type()], etc.) and [`ab_*`][ab_property()] functions (such as [ab_name()], [ab_group()], etc.).
#' @details Strings will be translated to foreign languages if they are defined in a local translation file. Additions to this file can be suggested at our repository. The file can be found here: <https://github.com/msberends/AMR/blob/main/data-raw/translations.tsv>. This file will be read by all functions where a translated output can be desired, like all [`mo_*`][mo_property()] functions (such as [mo_name()], [mo_gramstain()], [mo_type()], etc.) and [`ab_*`][ab_property()] functions (such as [ab_name()], [ab_group()], etc.).
#'
#' Currently supported languages are: `r vector_and(gsub(";.*", "", ISOcodes::ISO_639_2[which(ISOcodes::ISO_639_2$Alpha_2 %in% LANGUAGES_SUPPORTED), "Name"]), quotes = FALSE)`. Please note that currently not all these languages have translations available for all antimicrobial agents and colloquial microorganism names.
#' Currently supported languages are: `r vector_and(names(LANGUAGES_SUPPORTED), quotes = FALSE)`. All these languages have translations available for all antimicrobial agents and colloquial microorganism names.
#'
#' Please suggest your own translations [by creating a new issue on our repository](https://github.com/msberends/AMR/issues/new?title=Translations).
#'
@ -39,7 +39,7 @@
#' 1. Setting the R option `AMR_locale`, e.g. by running `options(AMR_locale = "de")`
#' 2. Setting the system variable `LANGUAGE` or `LANG`, e.g. by adding `LANGUAGE="de_DE.utf8"` to your `.Renviron` file in your home directory
#'
#' So if the R option `AMR_locale` is set, the system variables `LANGUAGE` and `LANG` will be ignored.
#' Thus, if the R option `AMR_locale` is set, the system variables `LANGUAGE` and `LANG` will be ignored.
#' @inheritSection AMR Read more on Our Website!
#' @rdname translate
#' @name translate
@ -47,23 +47,23 @@
#' @examples
#' # The 'language' argument of below functions
#' # will be set automatically to your system language
#' # with get_locale()
#' # with get_AMR_locale()
#'
#' # English
#' mo_name("CoNS", language = "en")
#' #> "Coagulase-negative Staphylococcus (CoNS)"
#'
#' # German
#' mo_name("CoNS", language = "de")
#' #> "Koagulase-negative Staphylococcus (KNS)"
#'
#' # Danish
#' mo_name("CoNS", language = "da")
#' #> "Koagulase-negative stafylokokker (KNS)"
#'
#' # Dutch
#' mo_name("CoNS", language = "nl")
#' #> "Coagulase-negatieve Staphylococcus (CNS)"
#'
#' # Spanish
#' mo_name("CoNS", language = "es")
#' #> "Staphylococcus coagulasa negativo (SCN)"
#' # German
#' mo_name("CoNS", language = "de")
#' #> "Koagulase-negative Staphylococcus (KNS)"
#'
#' # Italian
#' mo_name("CoNS", language = "it")
@ -72,7 +72,11 @@
#' # Portuguese
#' mo_name("CoNS", language = "pt")
#' #> "Staphylococcus coagulase negativo (CoNS)"
get_locale <- function() {
#'
#' # Spanish
#' mo_name("CoNS", language = "es")
#' #> "Staphylococcus coagulasa negativo (SCN)"
get_AMR_locale <- function() {
# AMR versions 1.3.0 and prior used the environmental variable:
if (!identical("", Sys.getenv("AMR_locale"))) {
options(AMR_locale = Sys.getenv("AMR_locale"))
@ -84,10 +88,10 @@ get_locale <- function() {
return(lang)
} else {
stop_("unsupported language set as option 'AMR_locale': \"", lang, "\" - use either ",
vector_or(LANGUAGES_SUPPORTED, quotes = TRUE))
vector_or(paste0('"', LANGUAGES_SUPPORTED, '" (', names(LANGUAGES_SUPPORTED), ")"), quotes = FALSE))
}
} else {
# we now support the LANGUAGE system variable - return it if set
# now check the LANGUAGE system variable - return it if set
if (!identical("", Sys.getenv("LANGUAGE"))) {
return(coerce_language_setting(Sys.getenv("LANGUAGE")))
}
@ -96,11 +100,22 @@ get_locale <- function() {
}
}
# fallback - automatic determination based on LC_COLLATE
if (interactive() && message_not_thrown_before("get_AMR_locale", entire_session = TRUE)) {
lang <- coerce_language_setting(Sys.getlocale("LC_COLLATE"))
if (lang != "en") {
message_("Assuming the ", names(LANGUAGES_SUPPORTED)[LANGUAGES_SUPPORTED == lang],
" language for the AMR package. Change this with `options(AMR_locale = \"...\")` or see `?get_AMR_locale()`. ",
"Supported languages are ", vector_and(names(LANGUAGES_SUPPORTED), quotes = FALSE),
". This note will be shown once per session.")
}
return(lang)
}
coerce_language_setting(Sys.getlocale("LC_COLLATE"))
}
coerce_language_setting <- function(lang) {
# grepl() with ignore.case = FALSE is faster than %like%
# grepl() with ignore.case = FALSE is 8x faster than %like_case%
if (grepl("^(English|en_|EN_)", lang, ignore.case = FALSE, perl = TRUE)) {
# as first option to optimise speed
"en"
@ -108,6 +123,8 @@ coerce_language_setting <- function(lang) {
"de"
} else if (grepl("^(Dutch|Nederlands|nl_|NL_)", lang, ignore.case = FALSE, perl = TRUE)) {
"nl"
} else if (grepl("^(Danish|Dansk|da_|DA_)", lang, ignore.case = FALSE, perl = TRUE)) {
"da"
} else if (grepl("^(Spanish|Espa.+ol|es_|ES_)", lang, ignore.case = FALSE, perl = TRUE)) {
"es"
} else if (grepl("^(Italian|Italiano|it_|IT_)", lang, ignore.case = FALSE, perl = TRUE)) {
@ -116,6 +133,10 @@ coerce_language_setting <- function(lang) {
"fr"
} else if (grepl("^(Portuguese|Portugu.+s|pt_|PT_)", lang, ignore.case = FALSE, perl = TRUE)) {
"pt"
} else if (grepl("^(Russian|pycc|ru_|RU_)", lang, ignore.case = FALSE, perl = TRUE)) {
"ru"
} else if (grepl("^(Swedish|Svenskt|sv_|SV_)", lang, ignore.case = FALSE, perl = TRUE)) {
"sv"
} else {
# other language -> set to English
"en"
@ -124,7 +145,7 @@ coerce_language_setting <- function(lang) {
# translate strings based on inst/translations.tsv
translate_AMR <- function(from,
language = get_locale(),
language = get_AMR_locale(),
only_unknown = FALSE,
only_affect_ab_names = FALSE,
only_affect_mo_names = FALSE) {

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -28,6 +28,18 @@
# They are to convert AMR-specific classes to bare characters and integers.
# All of them will be exported using s3_register() in R/zzz.R when loading the package.
# S3: ab_selector
# see https://github.com/tidyverse/dplyr/issues/5955 why this is required
vec_ptype2.character.ab_selector <- function(x, y, ...) {
x
}
vec_ptype2.ab_selector.character <- function(x, y, ...) {
y
}
vec_cast.character.ab_selector <- function(x, to, ...) {
unclass(x)
}
# S3: ab
vec_ptype2.character.ab <- function(x, y, ...) {
x
@ -60,15 +72,3 @@ vec_ptype2.disk.integer <- function(x, y, ...) {
vec_cast.integer.disk <- function(x, to, ...) {
unclass(x)
}
# S3: ab_selector
# see https://github.com/tidyverse/dplyr/issues/5955 why this is required
vec_ptype2.character.ab_selector <- function(x, y, ...) {
x
}
vec_ptype2.ab_selector.character <- function(x, y, ...) {
y
}
vec_cast.character.ab_selector <- function(x, to, ...) {
unclass(x)
}

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

19
R/zzz.R
View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -57,15 +57,21 @@ if (utf8_supported && !is_latex) {
s3_register("cleaner::freq", "mo")
s3_register("cleaner::freq", "rsi")
# Support for skim() from the skimr package
s3_register("skimr::get_skimmers", "mo")
s3_register("skimr::get_skimmers", "rsi")
s3_register("skimr::get_skimmers", "mic")
s3_register("skimr::get_skimmers", "disk")
if (pkg_is_available("skimr", also_load = FALSE, min_version = "2.0.0")) {
s3_register("skimr::get_skimmers", "mo")
s3_register("skimr::get_skimmers", "rsi")
s3_register("skimr::get_skimmers", "mic")
s3_register("skimr::get_skimmers", "disk")
}
# Support for autoplot() from the ggplot2 package
s3_register("ggplot2::autoplot", "rsi")
s3_register("ggplot2::autoplot", "mic")
s3_register("ggplot2::autoplot", "disk")
s3_register("ggplot2::autoplot", "resistance_predict")
# Support for fortify from the ggplot2 package
s3_register("ggplot2::fortify", "rsi")
s3_register("ggplot2::fortify", "mic")
s3_register("ggplot2::fortify", "disk")
# Support vctrs package for use in e.g. dplyr verbs
s3_register("vctrs::vec_ptype2", "ab.character")
s3_register("vctrs::vec_ptype2", "character.ab")
@ -161,6 +167,5 @@ create_MO.old_lookup <- function() {
create_intr_resistance <- function() {
# for mo_is_intrinsic_resistant() - saves a lot of time when executed on this vector
paste(AMR::microorganisms[match(AMR::intrinsic_resistant$microorganism, AMR::microorganisms$fullname), "mo", drop = TRUE],
AMR::antibiotics[match(AMR::intrinsic_resistant$antibiotic, AMR::antibiotics$name), "ab", drop = TRUE])
paste(AMR::intrinsic_resistant$mo, AMR::intrinsic_resistant$ab)
}

View File

@ -2,17 +2,17 @@
# `AMR` (for R)
![R-code-check](https://github.com/msberends/AMR/workflows/R-code-check/badge.svg?branch=master)
![R-code-check](https://github.com/msberends/AMR/workflows/R-code-check/badge.svg?branch=main)
[![CodeFactor](https://www.codefactor.io/repository/github/msberends/amr/badge)](https://www.codefactor.io/repository/github/msberends/amr)
[![Codecov](https://codecov.io/gh/msberends/AMR/branch/master/graph/badge.svg)](https://codecov.io/gh/msberends/AMR?branch=master)
[![Codecov](https://codecov.io/gh/msberends/AMR/branch/main/graph/badge.svg)](https://app.codecov.io/gh/msberends/AMR?branch=main)
<img src="https://msberends.github.io/AMR/works_great_on.png" align="center" height="150px" />
<img src="https://msberends.github.io/AMR/AMR_intro.svg" align="center" height="300px" />
The latest built **source package** (`AMR_latest.tar.gz`) can be found in folder [/data-raw/](https://github.com/msberends/AMR/tree/master/data-raw).
The latest built **source package** (`AMR_latest.tar.gz`) can be found in folder [/data-raw/](https://github.com/msberends/AMR/tree/main/data-raw).
`AMR` is a free, open-source and independent R package to simplify the analysis and prediction of Antimicrobial Resistance (AMR) and to work with microbial and antimicrobial data and properties, by using evidence-based methods. Our aim is to provide a standard for clean and reproducible antimicrobial resistance data analysis, that can therefore empower epidemiological analyses to continuously enable surveillance and treatment evaluation in any setting. It is currently being used in over 150 countries.
After installing this package, R knows ~70,000 distinct microbial species and all ~550 antibiotic, antimycotic, and antiviral drugs by name and code (including ATC, EARS-Net, PubChem, LOINC and SNOMED CT), and knows all about valid R/SI and MIC values. It supports any data format, including WHONET/EARS-Net data.
After installing this package, R knows ~71,000 distinct microbial species and all ~570 antibiotic, antimycotic, and antiviral drugs by name and code (including ATC, WHONET/EARS-Net, PubChem, LOINC and SNOMED CT), and knows all about valid R/SI and MIC values. It supports any data format, including WHONET/EARS-Net data. Antimicrobial names and group names are available in Danish, Dutch, English, French, German, Italian, Portuguese and Spanish.
This package is fully independent of any other R package and works on Windows, macOS and Linux with all versions of R since R-3.0.0 (April 2013). It was designed to work in any setting, including those with very limited resources. It was created for both routine data analysis and academic research at the Faculty of Medical Sciences of the University of Groningen, in collaboration with non-profit organisations Certe Medical Diagnostics and Advice Foundation and University Medical Center Groningen. This R package is actively maintained and free software; you can freely use and distribute it for both personal and commercial (but not patent) purposes under the terms of the GNU General Public License version 2.0 (GPL-2), as published by the Free Software Foundation.
@ -33,7 +33,7 @@ It will be downloaded and installed automatically. For RStudio, click on the men
### Copyright
This R package is licensed under the [GNU General Public License (GPL) v2.0](https://github.com/msberends/AMR/blob/master/LICENSE). In a nutshell, this means that this package:
This R package is licensed under the [GNU General Public License (GPL) v2.0](https://github.com/msberends/AMR/blob/main/LICENSE). In a nutshell, this means that this package:
- May be used for commercial purposes

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -175,7 +175,7 @@ reference:
- "`age_groups`"
- "`age`"
- "`availability`"
- "`get_locale`"
- "`get_AMR_locale`"
- "`ggplot_pca`"
- "`italicise_taxonomy`"
- "`join`"
@ -200,20 +200,6 @@ reference:
contents:
- "`AMR-deprecated`"
authors:
Matthijs S. Berends:
href: https://www.rug.nl/staff/m.s.berends/
Christian F. Luz:
href: https://www.rug.nl/staff/c.f.luz/
Alexander W. Friedrich:
href: https://www.rug.nl/staff/a.w.friedrich/
Bhanu N. M. Sinha:
href: https://www.rug.nl/staff/b.sinha/
Casper J. Albers:
href: https://www.rug.nl/staff/c.j.albers/
Corinna Glasner:
href: https://www.rug.nl/staff/c.glasner/
template:
bootstrap: 3
opengraph:

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -25,7 +25,7 @@
codecov:
require_ci_to_pass: no # allow fail
branch: master
branch: main
comment: no

View File

@ -1 +1 @@
* This package now has a data folder size of ~2.8 MB (this was ~5.6 MB), which will return a NOTE on R CMD CHECK. This package size is needed to provide users reference data for the complete taxonomy of microorganisms - one of the most important features of this package, following 15 previous releases of this package. All data sets were compressed using `compression = "xz"` to make them as small as possible.
* This package has a data folder size of ~1.7 MB, which might return a NOTE on some R CMD CHECKs. This package size is needed to provide users reference data for the complete taxonomy of microorganisms - one of the most important features of this package, as it has been in the 16 previous releases of this package. All data sets were compressed using `compression = "xz"` to make them as small as possible.

7101
data-raw/AMR_intro.ai Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,549 +0,0 @@
WHON5_CODE WHON4_CODE WHO_CODE DIN_CODE JAC_CODE USER_CODE ANTIBIOTIC GUIDELINES CLSI EUCAST SFM SRGA BSAC DIN NEO AFA ABX_NUMBER POTENCY BETALACTAM CLASS SUBCLASS PROF_CLASS CLSI_ORDER HUMAN VETERINARY ANIMAL_GP WHO_IMPORT LOINCCOMP LOINCGEN LOINCDISK LOINCMIC LOINCETEST LOINCSLOW LOINCAFB LOINCSBT LOINCMLC CLSI20_DR CLSI20_DI CLSI20_DS CLSI20_MS CLSI20_MR CLSI19_DR CLSI19_DI CLSI19_DS CLSI19_MS CLSI19_MR CLSI18_DR CLSI18_DI CLSI18_DS CLSI18_MS CLSI18_MR CLSI17_DR CLSI17_DI CLSI17_DS CLSI17_MS CLSI17_MR CLSI16_DR CLSI16_DI CLSI16_DS CLSI16_MS CLSI16_MR CLSI15_DR CLSI15_DI CLSI15_DS CLSI15_MS CLSI15_MR CLSI14_DR CLSI14_DI CLSI14_DS CLSI14_MS CLSI14_MR CLSI13_DR CLSI13_DI CLSI13_DS CLSI13_MS CLSI13_MR CLSI12_DR CLSI12_DI CLSI12_DS CLSI12_MS CLSI12_MR CLSI11_DR CLSI11_DI CLSI11_DS CLSI11_MS CLSI11_MR CLSI10_DR CLSI10_DI CLSI10_DS CLSI10_MS CLSI10_MR EUCST20_DR EUCST20_DI EUCST20_DS EUCST20_MS EUCST20_MR EUCST19_DR EUCST19_DI EUCST19_DS EUCST19_MS EUCST19_MR EUCST18_DR EUCST18_DI EUCST18_DS EUCST18_MS EUCST18_MR EUCST17_DR EUCST17_DI EUCST17_DS EUCST17_MS EUCST17_MR EUCST16_DR EUCST16_DI EUCST16_DS EUCST16_MS EUCST16_MR EUCST15_DR EUCST15_DI EUCST15_DS EUCST15_MS EUCST15_MR EUCST14_DR EUCST14_DI EUCST14_DS EUCST14_MS EUCST14_MR EUCST13_DR EUCST13_DI EUCST13_DS EUCST13_MS EUCST13_MR ECV12_DR ECV12_DI ECV12_DS ECV12_MS ECV12_MR EUCST11_DR EUCST11_DI EUCST11_DS EUCST11_MS EUCST11_MR NEODK16_DR NEODK16_DI NEODK16_DS NEODK16_MS NEODK16_MR NEODK13_DR NEODK13_DI NEODK13_DS NEODK13_MS NEODK13_MR NEODK98_DR NEODK98_DI NEODK98_DS NEODK98_MS NEODK98_MR SFM20_DR SFM20_DI SFM20_DS SFM20_MS SFM20_MR SFM07_DR SFM07_DI SFM07_DS SFM07_MS SFM07_MR DIN04_DR DIN04_DI DIN04_DS DIN04_MS DIN04_MR CRG96_DR CRG96_DI CRG96_DS CRG96_MS CRG96_MR AFA00_DR AFA00_DI AFA00_DS AFA00_MS AFA00_MR MENS00_DR MENS00_DI MENS00_DS MENS00_MS MENS00_MR SRGA98_DR SRGA98_DI SRGA98_DS SRGA98_MS SRGA98_MR BSAC00_DR BSAC00_DI BSAC00_DS BSAC00_MS BSAC00_MR OTHER_DR OTHER_DI OTHER_DS OTHER_MS OTHER_MR
AMC AUG AMC AMC AMPC-CVA Amoxicillin/Clavulanic acid CLSI,EUCAST(Most bacteria) X X X X X 2 20/10ug X Beta-lactam+Inhibitors BL+INH 03 X Amoxicilli 18862-3 21-6 20-8 6977-3 25310-4 22-4 19-0 13 14-17 18 8 32 13 14-17 18 8 32 13 14-17 18 8 32 13 14-17 18 8 32 13 14-17 18 8 32 13 14-17 18 8 32 13 14-17 18 8 32 13 14-17 18 8 32 13 14-17 18 8 32 13 14-17 18 8 32 13 14-17 18 8 32 11 12 8 16 13 14-20 21 4 32 20 21-27 28 2 16 2 32 17 - 18 8 16
APX APX APX ASP ASPC Aspoxicillin 213 X Penicillins Ureidopenicillin PEN 01c
AMC AU2 AMC AMC AMPC-CVA Amoxicillin/Clavulanic acid BSAC,EUCAST(Haemophilus) X X X 306 2/1ug X Beta-lactam+Inhibitors BL+INH 03 X Amoxicilli 18862-3 21-6 20-8 6977-3 25310-4 22-4 19-0 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 4 32 2 16 2 32 8 16
BDP BDP BDP Brodimoprim 220 Folate pathway inhibitors FOLATE 12a
BUT BUC BUT Butoconazole 221 Antifungals FUNG 29
CAP CAP CPR Capreomycin 128 Antimycobacterials MYCO 28 Capreomyci 18872-2 57-0 56-2 23607-5 58-8 55-4
CRB CAR CB CAR Carbenicillin CLSI,BSAC X X 9 100ug X Penicillins Carboxypenicillin PEN 01d X Carbenicil 18873-0 61-2 60-4 41668-5 62-0 59-6 19 20-22 23 16 64 19 20-22 23 16 64 12 - 13 128 256
CAR CAM CAR CAM CRMN Carumonam 148 X Monobactams MONO 06
CAS CAS CAS Caspofungin CLSI,NEO X X 441 5ug Antifungals FUNG 29 Caspofungi 32378-2
CAC FAC CAC CAC Cefacetrile 149 30ug X Cephems Cephalosporin I CEPH1 04a
CEC CFC CEC CEC CCL Cefaclor CLSI,EUCAST X X X X X 10 30ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefaclor 18874-8 85-1 84-4 6986-4 86-9 83-6 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 2 16 1 8 4 32 13 14-34 35 1 16 34 - 35 1 2
BEK BEK AKM Bekanamycin 444 Aminoglycosides AG 09
SAM AS2 SAM AMS ABPC-SBT Ampicillin/Sulbactam DIN X 211 20/10ug X Beta-lactam+Inhibitors BL+INH 03 X Ampicillin 18865-6 33-1 32-3 6980-7 20374-5 23618-2 34-9 31-5 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 4 32 15 16-24 25 2 16
SAM AS3 SAM AMS ABPC-SBT Ampicillin/Sulbactam NEO X 334 30/30ug X Beta-lactam+Inhibitors BL+INH 03 X Ampicillin 18865-6 33-1 32-3 6980-7 20374-5 23618-2 34-9 31-5 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 4 32 2 16
AMR AMR Amprolium 405 Coccidiostats COCC 27
ANI ANI Anidulafungin 477 Antifungals FUNG 29
APL APA APL APL Apalcillin 144 X Penicillins Ureidopenicillin PEN 01c
APR AP1 APR Apramycin CLSI X 400 15ug Aminoglycosides AG 09 X Apramycin 23659-6 73653-8 73652-0
BAC BAC B BTC BC Bacitracin zinc CLSI X X 8 10units Polypeptides POLYPEP 26 X Bacitracin 18870-6 10868-8 6827-0 6983-1 14 - 15 2 4
AMX AX3 AMX AMX AMPC Amoxicillin NEO X 330 30ug X Penicillins Aminopenicillin PEN 01b X Amoxicilli 18861-5 17-4 16-6 6976-5 18-2 15-8 14 15-27 28 4 32 2 16 2 32 2 32
AMX AMX AMX AMX AMPC Amoxicillin 485 2ug X Penicillins Aminopenicillin PEN 01b X Amoxicilli 18861-5 17-4 16-6 6976-5 18-2 15-8 4 32 2 16 2 32 2 32
CPC CPC CEPM-CVA Cefepime/Clavulanic acid 432 X Beta-lactam+Inhibitors BL+INH 03 Cefepime+C 42353-3 42350-9 42351-7 35763-2
CCP CEP CFPN Cefcapene 152 5ug X Cephems Cephalosporin III CEPH3 04c
AMC AU5 AMC AMC AMPC-CVA Amoxicillin/Clavulanic acid 307 25/2ug X Beta-lactam+Inhibitors BL+INH 03 X Amoxicilli 18862-3 21-6 20-8 6977-3 25310-4 22-4 19-0 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 4 32 2 16 2 32 8 16
BES BES Besifloxacin CLSI X 486 Quinolones Fluoroquinolone FQ 11b X 73606-6 73651-2 73628-0
BIA BIA BIPM Biapenem CLSI X 218 X Penems Carbapenems CARB 07a Biapenem 41728-7 41666-9 41665-1 41667-7
BCZ BCZ BCZ Bicyclomycin (Bicozamycin) 219 Rho factor inhibitors RHO 27
AMX AMX AMX AMX AMPC Amoxicillin CLSI X X 82 30ug X Penicillins Aminopenicillin PEN 01b X Amoxicilli 18861-5 17-4 16-6 6976-5 18-2 15-8 13 14-20 21 4 32 2 16 2 32 2 32
CTL CTL CTZ Ceftezole 450 X Cephems Cephalosporin I CEPH1 04a
AMX AX1 AMX AMX AMPC Amoxicillin EUCAST X X X 210 10ug X Penicillins Aminopenicillin PEN 01b X Amoxicilli 18861-5 17-4 16-6 6976-5 18-2 15-8 8 16 4 32 15 16-22 23 2 16 2 32 2 32
CFR DRX CFR CFR CDX Cefadroxil EUCAST X X X X 70 30ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefadroxil 18875-5 65-3 64-6 66-1 63-8 11 12 16 32 11 12-17 18 8 64 13 14-29 30 1 16 24 - 25 1 2
RID RID CD CLO Cefaloridine 71 30ug X Cephems Cephalosporin I CEPH1 04a Cephalorid 18899-5 158-6 157-8 41684-2 156-0 1 2
MAN MAN MA CMD CMD Cefamandole CLSI,DIN,BSAC X X X X 11 30ug X Cephems Cephalosporin II CEPH2 04b X Cefamandol 18876-3 69-5 68-7 41669-3 70-3 67-9 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-21 22 8 64 4 16 4 32 19 - 20 8 16
MAN MA6 MA CMD CMD Cefamandole NEO X 338 60ug X Cephems Cephalosporin II CEPH2 04b X Cefamandol 18876-3 69-5 68-7 41669-3 70-3 67-9 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 64 4 16 4 32 8 16
APR APR APR Apramycin NEO X 145 40ug Aminoglycosides AG 09 Apramycin 23659-6
CNX CNX CNX CFX CMNX Cefminox 229 X Cephems Cephamycin CEPHAM 04e
CZO CFZ CZ CEZ CEZ Cefazolin CLSI,DIN X X 12 30ug X Cephems Cephalosporin I CEPH1 04a X Cefazolin 18878-9 77-8 76-0 41670-1 78-6 75-2 19 20-22 23 2 8 19 20-22 23 2 8 19 20-22 23 2 8 19 20-22 23 2 8 19 20-22 23 2 8 19 20-22 23 2 8 19 20-22 23 2 8 19 20-22 23 2 8 19 20-22 23 2 8 19 20-22 23 2 8 14 15-17 18 1 4 19 20-21 22 4 16
CZO CZ6 CZ CEZ Cefazolin NEO X 339 60ug X Cephems Cephalosporin I CEPH1 04a X Cefazolin 18878-9 77-8 76-0 41670-1 78-6 75-2 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 4 16
CFB CFB CFB CBZ CBPZ Cefbuperazone 223 X Cephems Cephamycin CEPHAM 04e
CMZ CMZ CMZ CMT CMZ Cefmetazole CLSI X 99 30ug X Cephems Cephamycin CEPHAM 04e X Cefmetazol 18881-3 89-3 88-5 11575-8 90-1 87-7 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64
CCX CCX CCP Cefcapene pivoxil 445 X Cephems-Oral Cephalosporin CEPH-ORAL 05a
BAM BAM BAC BAPC Bacampicillin 147 X Penicillins Aminopenicillin PEN 01b Bacampicil 18869-8 49-7 48-9 50-5 47-1
AMC AU3 AMC AMC AMPC-CVA Amoxicillin/Clavulanic acid NEO X 331 30/15ug X Beta-lactam+Inhibitors BL+INH 03 X Amoxicilli 18862-3 21-6 20-8 6977-3 25310-4 22-4 19-0 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 14 15-27 28 4 32 2 16 2 32 8 16
AXS AXS AMC AMPC-SBT Amoxicillin/Sulbactam 3 X Beta-lactam+Inhibitors BL+INH 03
AMB AMB AB APH AMPH-B Amphotericin B CLSI,NEO X X 127 10ug Antifungals FUNG 29 Amphoteric 18863-1 25-7 24-0 6978-1 26-5 23-2 1 2
AMP AM2 AM AMP ABPC Ampicillin EUCAST(Other bacteria) X X X 309 2ug X Penicillins Aminopenicillin PEN 01b X Ampicillin 18864-9 29-9 28-1 6979-9 30-7 27-3 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 16 4 32 2 16 2 32 2 32 1 16 8 16
CRO CRO CRO CRO CTRX Ceftriaxone CLSI,EUCAST X X X X X X X 20 30ug X Cephems Cephalosporin III CEPH3 04c X Ceftriaxon 18895-3 142-0 141-2 6998-9 25367-4 143-8 140-4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 12 13-25 26 14 15-20 21 4 64 16 17-20 21 4 32 20 21-27 28 2 16 26 27-29 30 .5 2 27 - 28 1 2
AMP AM5 AM AMP ABPC Ampicillin BSAC X 308 25ug X Penicillins Aminopenicillin PEN 01b X Ampicillin 18864-9 29-9 28-1 6979-9 30-7 27-3 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 4 32 2 16 2 32 2 32 1 16 8 16
AMP AM1 AM AMP ABPC Ampicillin NEO X 332 2.5ug X Penicillins Aminopenicillin PEN 01b X Ampicillin 18864-9 29-9 28-1 6979-9 30-7 27-3 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 4 32 2 16 2 32 2 32 1 16 8 16
AMP AM3 AM AMP ABPC Ampicillin NEO X 333 33ug X Penicillins Aminopenicillin PEN 01b X Ampicillin 18864-9 29-9 28-1 6979-9 30-7 27-3 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 14 15-27 28 4 32 2 16 2 32 2 32 1 16 8 16
CRB CA5 CB CAR Carbenicillin NEO X 337 115ug X Penicillins Carboxypenicillin PEN 01d X Carbenicil 18873-0 61-2 60-4 41668-5 62-0 59-6 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 9 10-27 28 128 256
CTB BUT CTB CIB CETB Ceftibuten CLSI,EUCAST X X X X 140 30ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Ceftibuten 35779-8 35777-2 35778-0 6996-3 17 18-20 21 8 32 17 18-20 21 8 32 17 18-20 21 8 32 17 18-20 21 8 32 17 18-20 21 8 32 17 18-20 21 8 32 17 18-20 21 8 32 17 18-20 21 8 32 17 18-20 21 8 32 17 18-20 21 8 32 17 18-20 21 8 32 20 21 1 2 2 16 1 8 23 24-26 27 1 8 1 2
CFM FIX CFM CFI CFIX Cefixime CLSI,EUCAST X X X X X 69 5ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefixime 18880-5 81-0 80-2 35766-5 82-8 79-4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 16 17 1 2 1 4 1 4 19 - 20 1 2
CFM FI1 CFM CFI CFIX Cefixime DIN X X 186 10ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefixime 18880-5 81-0 80-2 35766-5 82-8 79-4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 21 22-24 25 1 4 21 22-25 26 1 4 1 2
CFM FI3 CFM CFI CFIX Cefixime NEO X 340 30ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefixime 18880-5 81-0 80-2 35766-5 82-8 79-4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 2
CZP CZP CZX-AP Ceftizoxime alapivoxil 447 X Cephems Cephalosporin III CEPH3 04c
CMX ME0 CMX CMX CMX Cefmenoxime DIN X 228 10ug X Cephems Cephalosporin III CEPH3 04c Cefmenoxim 32375-8 2 16 1 4
CTE CTE CH CTE Chlortetracycline 91 Tetracyclines TETRA 24 Chlortetra 18904-3 178-4 177-6 179-2 176-8
CIC CCL CI ACPC Ciclacillin 159 X Penicillins Aminopenicillin PEN 01b Cyclacilli 18913-4 210-5 209-7 211-3 208-9
CIN CI3 CIN CIN CINX Cinoxacin SRGA,NEO X X 191 30ug Quinolones Quinolone QUIN 11a X Cinoxacin 18905-0 182-6 181-8 183-4 180-0 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 15 16-19 20 8 32
CIN CIN CIN CIN CINX Cinoxacin CLSI X 25 100ug Quinolones Quinolone QUIN 11a X Cinoxacin 18905-0 182-6 181-8 183-4 180-0 14 15-18 19 16 64 14 15-18 19 16 64 14 15-18 19 16 64 14 15-18 19 16 64 14 15-18 19 16 64 14 15-18 19 16 64 14 15-18 19 16 64 14 15-18 19 16 64 14 15-18 19 16 64 14 15-18 19 16 64 14 15-18 19 16 64 8 32
CIP CI0 CIP CPFX Ciprofloxacin AFA,SRGA,NEO X X X 192 10ug Quinolones Fluoroquinolone FQ 11b X Ciprofloxa 18906-8 186-7 185-9 7002-9 20377-8 23621-6 187-5 184-2 0.25 1 0.25 1 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 12 13-23 24 1 4 1 4 1 4 18 19-26 27 .25 4 17 18-23 24 .125 2 1 2
ARB ARB ARB ABK Arbekacin 212 Aminoglycosides AG 09 Arbekacin 32373-3
CZD CZD CZD CZD Cefazedone 222 X Cephems Cephalosporin I CEPH1 04a
CIP CI5 CIP CPFX Ciprofloxacin NEO X 346 .5ug Quinolones Fluoroquinolone FQ 11b X Ciprofloxa 18906-8 186-7 185-9 7002-9 20377-8 23621-6 187-5 184-2 0.25 1 0.25 1 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 .25 4 .125 2 1 2
CIP CI1 CIP CPFX Ciprofloxacin BSAC X 314 1ug Quinolones Fluoroquinolone FQ 11b X Ciprofloxa 18906-8 186-7 185-9 7002-9 20377-8 23621-6 187-5 184-2 0.25 1 0.25 1 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 .25 4 .125 2 17 - 18 1 2
CIP CIP CIP CPFX Ciprofloxacin CLSI,EUCAST X X X X X 26 5ug Quinolones Fluoroquinolone FQ 11b X Ciprofloxa 18906-8 186-7 185-9 7002-9 20377-8 23621-6 187-5 184-2 21 22-25 26 0.25 1 21 22-25 26 0.25 1 15 16-20 21 1 4 15 16-20 21 1 4 15 16-20 21 1 4 15 16-20 21 1 4 15 16-20 21 1 4 15 16-20 21 1 4 15 16-20 21 1 4 15 16-20 21 1 4 15 16-20 21 1 4 18 19-21 22 0.5 2 21 22-24 25 .5 2 18 19-22 23 1 4 1 4 .25 4 .125 2 1 2
CLR CL3 CLR CLR CAM Clarithromycin NEO X 347 30ug Macrolides 14-Membered ring MACRO 17 X Clarithrom 18907-6 190-9 189-1 7003-7 20375-2 23619-0 191-7 188-3 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 12 13-21 22 2 8 .5 4 1 4 .5 1 .5 1
CTZ FAT CTZ CRI CFT Cefatrizine X 151 10ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a Cefatrizin 18877-1 73-7 72-9 74-5 71-1 14 15-21 22 2 16
CLR CLA CLR CLR CAM Clarithromycin CLSI,EUCAST X X X X X X 103 15ug Macrolides 14-Membered ring MACRO 17a X Clarithrom 18907-6 190-9 189-1 7003-7 20375-2 23619-0 191-7 188-3 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 16 17-20 21 2 8 .5 4 16 17-20 21 1 4 19 20-24 25 .5 1 .5 1
CLR CR2 CLR CLR CAM Clarithromycin X 410 2ug Macrolides 14-Membered ring MACRO 17 X Clarithrom 18907-6 190-9 189-1 7003-7 20375-2 23619-0 191-7 188-3 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 .5 4 1 4 .5 1 19 - 20 .5 1
CED RAD CED CED CED Cephradine NEO X 74 60ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a Cephradine 18902-7 170-1 169-3 171-9 168-5 8 64 4 32 2 4
CED RA3 CED CED CED Cephradine BSAC X X 408 30ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a Cephradine 18902-7 170-1 169-3 171-9 168-5 11 12-17 18 8 64 4 32 11 - 12 2 4
CTB BU1 CTB CIB CETB Ceftibuten DIN,BSAC X X X 189 10ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Ceftibuten 35779-8 35777-2 35778-0 6996-3 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 15 16-19 20 2 16 1 8 1 8 27 - 28 1 2
DIZ DIZ CDZ CFO CDZM Cefodizime DIN X 100 10ug X Cephems Cephalosporin III CEPH3 04c Cefodizime 18882-1 93-5 92-7 6988-0 94-3 91-9 15 16-17 18 4 16
CHL CH6 C CMP CP Chloramphenicol NEO X 345 60ug Phenicols PHEN 22 X Chloramphe 18903-5 174-3 173-5 7001-1 175-0 172-7 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 14 15-27 28 8 32 8 16 4 16 2 8 8 16 8 16
CMX MEN CMX CMX CMX Cefmenoxime X 85 30ug X Cephems Cephalosporin III CEPH3 04c Cefmenoxim 32375-8 2 16 1 4
CHL CHL C CMP CP Chloramphenicol CLSI,EUCAST X X X X X X X 24 30ug Phenicols PHEN 22 X Chloramphe 18903-5 174-3 173-5 7001-1 175-0 172-7 12 13-17 18 8 32 12 13-17 18 8 32 12 13-17 18 8 32 12 13-17 18 8 32 12 13-17 18 8 32 12 13-17 18 8 32 12 13-17 18 8 32 12 13-17 18 8 32 12 13-17 18 8 32 12 13-17 18 8 32 12 13-17 18 8 32 16 17 8 16 18 19-22 23 8 32 20 - 21 8 16 4 16 24 25-31 32 2 8 17 18-20 21 8 16 20 - 21 8 16
AVO AVO AVO Avoparcin 215 Glycopeptides Glycopeptide GLYCO 21a
FOX FOX FOX COX CFX Cefoxitin CLSI,EUCAST X X X X X X 17 30ug X Cephems Cephamycin CEPHAM 04e X Cefoxitin 18888-8 117-2 116-4 6991-4 25366-6 118-0 115-6 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-21 22 8 64 20 21-25 26 4 16 4 32 17 18-27 28 2 16 15 16-19 20 4 16 19 - 20 4 8
CPD PO1 CPD CPO CPDX Cefpodoxime 407 1ug X Cephems Cephalosporin III CEPH3 04c X Cefpodoxim 18890-4 121-4 120-6 6993-0 122-2 119-8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 1 4 1 4 1 2
AST AST AST AST ASTM Astromicin 146 Aminoglycosides AG 09
CPD PO5 CPD CPO CPDX Cefpodoxime BSAC X 311 5ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefpodoxim 18890-4 121-4 120-6 6993-0 122-2 119-8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 1 4 1 4 33 - 34 1 2
CLI CL1 CM CLI CLDM Clindamycin AFA,SRGA X X 193 15ug Lincosamides LINCO 15 X Clindamyci 18908-4 194-1 193-3 7005-2 195-8 192-5 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 2 4 1 8 1 8 17 18-23 24 1 4 19 20-27 28 .5 4 .5 1
CLI CL2 CM CLI CLDM Clindamycin NEO X 348 25ug Lincosamides LINCO 15 X Clindamyci 18908-4 194-1 193-3 7005-2 195-8 192-5 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 .5 4 14 15-27 28 2 4 1 8 1 8 1 4 .5 4 .5 1
CLF CLF Clofazimine 482 Antimycobacterials MYCO 28
CTR CLO CTR CTR Clotrimazole NEO X 158 10ug Antifungals FUNG 29 Clotrimazo 18909-2 10653-4 10654-2
CLR CL5 CLR CLR CAM Clarithromycin X 409 5ug Macrolides 14-Membered ring MACRO 17 X Clarithrom 18907-6 190-9 189-1 7003-7 20375-2 23619-0 191-7 188-3 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 .5 4 1 4 .5 1 .5 1
CLA CLV CLA CLA CVA Clavulanic acid CLSI X 246 X Beta-lactamase inhibitors BL-INH 02 Clavulanat 41733-7 41686-7 41687-5 41685-9
CLX CLN CLN Clinafloxacin CLSI X 157 5ug Quinolones Fluoroquinolone FQ 11b X Clinafloxa 32376-6 35785-5 35786-3 7004-5
CHL CH1 C CMP CP Chloramphenicol BSAC,NEO X X 313 10ug Phenicols PHEN 22 X Chloramphe 18903-5 174-3 173-5 7001-1 175-0 172-7 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 16 4 16 2 8 8 16 8 16
CTT CTN CTT CTT CTT Cefotetan CLSI,BSAC X X X 16 30ug X Cephems Cephamycin CEPHAM 04e X Cefotetan 18887-0 113-1 112-3 6990-6 114-9 111-5 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-15 16 16 64 12 13-23 24 16 17-22 23 4 64 4 32 4 32 23 - 24 4 8
CTF FOT CTF CTM CTM Cefotiam DIN X X 86 30ug X Cephems Cephamycin CEPHAM 04e Cefotiam 32374-1 35772-3 35773-1 14 15-21 22 4 64 16 17-19 20 4 16
CHE CHE CTH CTM-HE Cefotiam hexetil X 235 10ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a 18 19-21 22 1 4
CHE CHE CTH CTM-HE Cefotiam hexetil DIN X 435 30ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a 20 21-25 26 1 8
CLI CLI CM CLI CLDM Clindamycin CLSI,EUCAST X X X X 27 2ug Lincosamides LINCO 15 X Clindamyci 18908-4 194-1 193-3 7005-2 195-8 192-5 14 15-20 21 .5 4 14 15-20 21 .5 4 14 15-20 21 .5 4 14 15-20 21 .5 4 14 15-20 21 .5 4 14 15-20 21 .5 4 14 15-20 21 .5 4 14 15-20 21 .5 4 14 15-20 21 .5 4 14 15-20 21 .5 4 14 15-20 21 .5 4 14 - 15 2 4 1 8 1 8 1 4 .5 4 25 - 26 .5 1
FCT 5C1 FCT 5FC 5-FC 5-Fluorocytosine CLSI,NEO X X 328 10ug Antifungals FUNG 29 X 5-Fluorocy 18855-7 254-3 253-5 7014-4 255-0 252-7 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 8 16
FCT 5FC FCT 5-FC 5-Fluorocytosine CLSI,NEO X X 126 1ug Antifungals FUNG 29 X 5-Fluorocy 18855-7 254-3 253-5 7014-4 255-0 252-7 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 8 16
ACM ACM Acetylmidecamycin 114 Macrolides MACRO 17
ASP ASP Acetylspiramycin 113 Macrolides MACRO 17
CTO CTO CTO Cetocycline 245 Tetracyclines TETRA 24
ATM ATM ATM AZT AZT Aztreonam CLSI,EUCAST X X X X X X 7 30ug X Monobactams MONO 06 X Aztreonam 18868-0 45-5 44-8 6982-3 46-3 43-0 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 20 25 1 16 16 17-22 23 4 64 2 32 4 16 14 15-25 26 2 32 24 25-27 28 0.5 2 23 - 24 8 16
ATM AT1 ATM AZT AZT Aztreonam DIN X 217 10ug X Monobactams MONO 06 X Aztreonam 18868-0 45-5 44-8 6982-3 46-3 43-0 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 64 2 32 4 16 2 32 0.5 2 8 16
CID CID CID CNI Cefonicid CLSI X 13 30ug X Cephems Cephalosporin II CEPH2 04b X Cefonicid 18883-9 97-6 96-8 98-4 95-0 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32
CFP CFP CFP CPZ CPZ Cefoperazone CLSI X 14 75ug X Cephems Cephalosporin II CEPH2 04b X Cefoperazo 18884-7 101-6 100-8 35767-3 102-4 99-2 15 16-20 21 16 64 15 16-20 21 16 64 15 16-20 21 16 64 15 16-20 21 16 64 15 16-20 21 16 64 15 16-20 21 16 64 15 16-20 21 16 64 15 16-20 21 16 64 15 16-20 21 16 64 15 16-20 21 16 64 15 16-20 21 16 64 4 64 4 32 4 8
CFP CP1 CFP CPZ CPZ Cefoperazone DIN X 230 10ug X Cephems Cephalosporin II CEPH2 04b X Cefoperazo 18884-7 101-6 100-8 35767-3 102-4 99-2 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 4 64 14 15-20 21 4 32 4 8
CFP CF3 CFP CPZ CPZ Cefoperazone BSAC X X 187 30ug X Cephems Cephalosporin II CEPH2 04b X Cefoperazo 18884-7 101-6 100-8 35767-3 102-4 99-2 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 13 14-20 21 4 64 4 32 24 - 25 4 8
CFP CF6 CFP CPZ CPZ Cefoperazone NEO X 341 60ug X Cephems Cephalosporin II CEPH2 04b X Cefoperazo 18884-7 101-6 100-8 35767-3 102-4 99-2 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 4 64 4 32 4 8
CSL CFS CPS CPZ-SBT Cefoperazone/Sulbactam DIN X 101 30/15ug X Beta-lactam+Inhibitors BL+INH 03 35768-1 15 16-21 22
CND CND CND Ceforanide NEO X 231 30ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a Ceforanide 18885-4 105-7 104-0 106-5 103-2
CSE CSE Cefoselis 448 X Cephems Cephalosporin IV CEPH4 04d
AMK AMK AN AMK AMK Amikacin CLSI,EUCAST X X X X X X 1 30ug Aminoglycosides AG 09 X Amikacin 18860-7 13-3 12-5 6975-7 20373-7 23624-0 14-1 11-7 14 15-16 17 16 64 14 15-16 17 16 64 14 15-16 17 16 64 14 15-16 17 16 64 14 15-16 17 16 64 14 15-16 17 16 64 14 15-16 17 16 64 14 15-16 17 16 64 14 15-16 17 16 64 14 15-16 17 16 64 14 15-16 17 16 64 12 13-15 16 8 32 14 15-16 17 8 32 13 14-19 20 4 32 4 32 15 16-18 19 4 8 19 - 20 4 8
AMP AMP AM AMP ABPC Ampicillin CLSI,EUCAST(Enterobacterales) X X X X X X X 4 10ug X Penicillins Aminopenicillin PEN 01b X Ampicillin 18864-9 29-9 28-1 6979-9 30-7 27-3 13 14-16 17 8 32 13 14-16 17 8 32 13 14-16 17 8 32 13 14-16 17 8 32 13 14-16 17 8 32 13 14-16 17 8 32 13 14-16 17 8 32 13 14-16 17 8 32 13 14-16 17 8 32 13 14-16 17 8 32 13 14-16 17 8 32 11 12 8 16 13 14-18 19 4 32 14 15-21 22 2 16 2 32 8 9-21 22 2 32 11 12-29 30 1 16 17 - 18 8 16
SAM AMS SAM AMS ABPC-SBT Ampicillin/Sulbactam CLSI,EUCAST X X X 5 10/10ug X Beta-lactam+Inhibitors BL+INH 03 X Ampicillin 18865-6 33-1 32-3 6980-7 20374-5 23618-2 34-9 31-5 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 8 16 13 14-18 19 4 32 2 16
AVB AVB Avibactam CLSI X 496 X Beta-lactamase inhibitors BL-INH
AVI AVI AVI AVM Avilamycin 214 Everninomycins EVER 27 Avilamycin 35756-6 35754-1 35755-8
AZM AZI AZM AZM Azithromycin CLSI,EUCAST X X X X X X X 83 15ug Macrolides 15-Membered ring MACRO 17a X Azithromyc 18866-4 37-2 36-4 6981-5 23612-5 38-0 35-6 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 13 14-17 18 2 8 16 17-21 22 .5 8 17 18-20 21 2 8 19 20-23 24 1 4 19 20-22 23 .5 1 19 - 20 1 2
AZM AI3 AZM AZM Azithromycin NEO X 335 30ug Macrolides 15-Membered ring MACRO 17 X Azithromyc 18866-4 37-2 36-4 6981-5 23612-5 38-0 35-6 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 12 13-21 22 .5 8 2 8 1 4 .5 1 1 2
AZL AZL AZL AZL Azlocillin CLSI X X 6 75ug X Penicillins Ureidopenicillin PEN 01c X Azlocillin 18867-2 41-4 40-6 41661-0 42-2 39-8 17 - 18 64 128 17 - 18 64 128 17 18 64 128 17 18 64 128 17 18 64 128 17 18 64 128 17 18 64 128 17 18 64 128 17 18 64 128 17 18 64 128 17 18 64 128 12 13-18 19 16 128 2 32
AZL AZ3 AZL AZL Azlocillin AFA,DIN,NEO X X X 216 30ug X Penicillins Ureidopenicillin PEN 01c X Azlocillin 18867-2 41-4 40-6 41661-0 42-2 39-8 64 128 64 128 64 128 64 128 64 128 64 128 64 128 64 128 64 128 64 128 64 128 14 15-27 28 16 128 12 13-21 22 15 16-27 28 2 32
CDR DIN CDR CFD CFDN Cefdinir CLSI X 96 5ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefdinir 23636-4 35758-2 23637-2 35757-4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4
DIT DIT CDT CDTR Cefditoren CLSI X 153 5ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefditoren 35762-4 35759-0 35761-6 35760-8
DIX DIX CDTR-PI Cefditoren pivoxil 446 X Cephems-Oral Cephalosporin CEPH-ORAL 05a
FEP FEP FEP CEP CEPM Cefepime CLSI,EUCAST X X X X X 97 30ug X Cephems Cephalosporin IV CEPH4 04d X Cefepime 18879-7 8272-7 6644-9 6987-2 8273-5 6643-1 18 19-24 25 2 16 18 19-24 25 2 16 18 19-24 25 2 16 18 19-24 25 2 16 18 19-24 25 2 16 18 19-24 25 2 16 18 19-24 25 2 16 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 17 18-23 24 1 16 14 15-27 28 14 15-20 21 4 64 4 32 23 24-26 27 .5 2 31 - 32 2 4
FEP FE1 FEP CEP CEPM Cefepime DIN X 224 10ug X Cephems Cephalosporin IV CEPH4 04d X Cefepime 18879-7 8272-7 6644-9 6987-2 8273-5 6643-1 2 16 2 16 2 16 2 16 2 16 2 16 2 16 8 32 8 32 8 32 8 32 4 64 12 13-18 19 4 32 .5 2 2 4
CTX FTX CTX CTX CTX Cefotaxime CLSI,SRGA,BSAC X X X X X 15 30ug X Cephems Cephalosporin III CEPH3 04c X Cefotaxime 18886-2 109-9 108-1 6989-8 110-7 107-3 22 23-25 26 1 4 22 23-25 26 1 4 22 23-25 26 1 4 22 23-25 26 1 4 22 23-25 26 1 4 22 23-25 26 1 4 22 23-25 26 1 4 22 23-25 26 1 4 22 23-25 26 1 4 22 23-25 26 1 4 22 23-25 26 1 4 14 15-27 28 14 15-20 21 4 64 2 16 4 32 20 21-26 27 2 16 23 24-26 27 .5 2 29 - 30 1 2
CTX FT5 CTX CTX CTX Cefotaxime EUCAST X X X 406 5ug X Cephems Cephalosporin III CEPH3 04c X Cefotaxime 18886-2 109-9 108-1 6989-8 110-7 107-3 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 17 18-20 21 1 4 4 64 2 16 4 32 2 16 .5 2 1 2
CTX FT1 CTX CTX CTX Cefotaxime DIN X 232 10ug X Cephems Cephalosporin III CEPH3 04c X Cefotaxime 18886-2 109-9 108-1 6989-8 110-7 107-3 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 4 64 13 14-20 21 2 16 4 32 2 16 .5 2 1 2
CTC CTC CTX-CVA Cefotaxime/Clavulanic acid CLSI X 394 30/10ug X Beta-lactam+Inhibitors BL+INH 03 X Cefotaxime 35771-5 35769-9 35770-7 41671-9
CTS CTS CTS CTX-SBT Cefotaxime/Sulbactam DIN X 233 10/15ug X Beta-lactam+Inhibitors BL+INH 03 2 16
CTT CT1 CTT CTT CTT Cefotetan DIN X 234 10ug X Cephems Cephamycin CEPHAM 04e X Cefotetan 18887-0 113-1 112-3 6990-6 114-9 111-5 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 4 64 4 32 4 32 4 8
CAT FET CAT CFT CEMT Cefetamet CLSI X 98 10ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefetamet 32377-4 35764-0 35765-7 14 15-17 18 4 16 14 15-17 18 4 16 14 15-17 18 4 16 14 15-17 18 4 16 14 15-17 18 4 16 14 15-17 18 4 16 14 15-17 18 4 16 14 15-17 18 4 16 14 15-17 18 4 16 14 15-17 18 4 16 14 15-17 18 4 16
CPI CPI CFP CEMT-PI Cefetamet pivoxil DIN X 225 10ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a 19 20-25 26 1 8
CCL CET CCL Cefetecol (Cefcatacol) 226 X Cephems Cephalosporin IV CEPH4 04d
CZL CZL CZL Cefetrizole 227 X Cephems Cephalosporin-new CEPH? 04e
CFS SLD CFS CFS CFS Cefsulodin DIN X X 73 30ug X Cephems Cephalosporin III CEPH3 04c Cefsulodin 18892-0 129-7 128-9 130-5 127-1 14 15-27 28 13 14-21 22 8 64 18 19-28 29 4 32
CSU CSU CSU CSM Cefsumide 240 X Cephems Cephalosporin-new CEPH? 04e
CPT CPT Ceftaroline CLSI X 475 30ug X Cephems Cephalosporin CEPH 04b X 73605-8 73650-4 73627-2 19 20-22 23 .5 2 19 20-22 23 .5 2 19 20-22 23 .5 2 19 20-22 23 .5 2 19 20-22 23 .5 2 19 20-22 23 .5 2 19 20-22 23 .5 2 19 20-22 23 .5 2
CPT CPT Ceftaroline EUCAST X X 507 5ug Cephems Cephalosporin CEPH 04b 73605-8 73650-4 73627-2
CPA CPA Ceftaroline/Avibactam CLSI X 497 30/15ug X Beta-lactam+Inhibitors BL+INH 03 X 73604-1 73649-6 73626-4
BAC BA4 B BTC BC Bacitracin zinc NEO X 336 40units Polypeptides POLYPEP 26 X Bacitracin 18870-6 10868-8 6827-0 6983-1 12 13-21 22 2 4
CZX ZOX CZX CZX CZX Ceftizoxime CLSI,BSAC X X X 19 30ug X Cephems Cephalosporin III CEPH3 04c X Ceftizoxim 18894-6 138-8 137-0 6997-1 20378-6 23622-4 139-6 136-2 21 22-24 25 1 4 21 22-24 25 1 4 21 22-24 25 1 4 21 22-24 25 1 4 21 22-24 25 1 4 21 22-24 25 1 4 21 22-24 25 1 4 21 22-24 25 1 4 21 22-24 25 1 4 21 22-24 25 1 4 21 22-24 25 1 4 14 15-20 21 4 64 2 16 29 - 30 1 2
CAZ CAZ CAZ CAZ CAZ Ceftazidime CLSI,SRGA,BSAC X X X X X 18 30ug X Cephems Cephalosporin III CEPH3 04c X Ceftazidim 18893-8 134-7 133-9 6995-5 135-4 132-1 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 17 18-20 21 4 16 14 15-27 28 14 15-20 21 4 64 4 32 4 32 19 20-25 26 2 16 23 24-26 27 2 8 27 - 28 2 4
CAZ CA1 CAZ CAZ CAZ Ceftazidime EUCAST X X X 241 10ug X Cephems Cephalosporin III CEPH3 04c X Ceftazidim 18893-8 134-7 133-9 6995-5 135-4 132-1 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 14 15-29 20 1 16 4 64 10 11-15 16 4 32 4 32 2 16 2 8 2 4
CZA CZA Ceftazidime/Avibactam CLSI X 498 30/20ug X Beta-lactam+Inhibitors BL+INH 03 X 73603-3 73648-8 73625-6 20 21 8 16 20 21 8 16 20 21 8 16
TIO TIO CFL Ceftiofur CLSI X 154 30ug X Cephems Cephalosporin III CEPH3 04c X Ceftiofur 23709-9 35780-6 35781-4 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8
CZX ZO5 CZX CZX CZX Ceftizoxime DIN X 244 5ug X Cephems Cephalosporin III CEPH3 04c X Ceftizoxim 18894-6 138-8 137-0 6997-1 20378-6 23622-4 139-6 136-2 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 4 64 11 12-16 17 2 16 1 2
BPR BPR Ceftobiprole CLSI X 474 30ug X Cephems Cephalosporin CEPH 04e X Ceftobipro 43272-4 43269-0 43271-6 43270-8
CZT CZT Ceftolozane/Tazobactam CLSI,EUCAST X X X 506 30/10ug X Beta-lactam+Inhibitors BL+INH X 73602-5 73647-0 73624-9 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 2 8 2 8
CCV CCV CAZ-CVA Ceftazidime/Clavulanic acid CLSI X 242 30/4ug X Beta-lactam+Inhibitors BL+INH 03 X Ceftazidim 35776-4 35774-9 35775-6 42352-5
CEM CEM CEM CFM Cefteram 243 X Cephems Cephalosporin II CEPH2 04b
CPL CPL CFTM-PI Cefteram pivoxil 449 X Cephems-Oral Cephalosporin CEPH-ORAL 05a
CEC CF1 CEC CEC CCL Cefaclor X 185 10ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefaclor 18874-8 85-1 84-4 6986-4 86-9 83-6 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 15 16-21 22 2 16 1 8 4 32 1 16 1 2
CXM FR5 CXM CXM CXM Cefuroxime BSAC X 312 5ug X Cephems Cephalosporin II CEPH2 04b X Cefuroxime 18896-1 146-1 145-3 6999-7 147-9 144-6 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 64 4 16 4 32 2 16 8 16 1 32
AMK AK4 AN AMK AMK Amikacin NEO X 329 40ug Aminoglycosides AG 09 X Amikacin 18860-7 13-3 12-5 6975-7 20373-7 23624-0 14-1 11-7 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 14 15-25 26 8 32 4 32 4 32 4 8 4 8
CXM FRX CXM CXM CXM Cefuroxime CLSI,EUCAST X X X X X X X 21 30ug X Cephems Cephalosporin II CEPH2 04b X Cefuroxime 18896-1 146-1 145-3 6999-7 147-9 144-6 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 17 18 8 16 14 15-21 22 8 64 4 16 4 32 19 20-28 29 2 16 15 16-18 19 8 16 17 18-24 25 1 32
CXM FR6 CXM CXM CXM Cefuroxime NEO X 343 60ug X Cephems Cephalosporin II CEPH2 04b X Cefuroxime 18896-1 146-1 145-3 6999-7 147-9 144-6 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 14 15-27 28 8 64 4 16 4 32 2 16 8 16 1 32
CXA FRA CFA CXM-AX Cefuroxime axetil CLSI,EUCAST X X X X X 22 30ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefuroxime 35783-0 35782-2 20460-2 14 15-22 23 4 32 14 15-22 23 4 32 14 15-22 23 4 32 14 15-22 23 4 32 14 15-22 23 4 32 14 15-22 23 4 32 14 15-22 23 4 32 14 15-22 23 4 32 14 15-22 23 4 32 14 15-22 23 4 32 14 15-22 23 4 32 17 18 8 16 1 8 1 8 1 32 24 25-28 29 1 4 24 - 25 1 2
CXA FR1 CFA CXM-AX Cefuroxime axetil X 190 10ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefuroxime 35783-0 35782-2 20460-2 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 19 20-25 26 1 8 1 8 1 32 1 4 1 2
ZON ZON CFZ Cefuzonam 155 X Cephems Cephamycin CEPHAM 04e
LEX LEX CN CEX CEX Cephalexin EUCAST X X X X 121 30ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cephalexin 18897-9 150-3 149-5 35784-8 151-1 148-7 16 32 11 12-17 18 8 64 20 21-31 32 13 14-26 27 1 16 24 - 25 2 4
CEP KE6 CF CTN CET Cephalothin NEO X 344 66ug X Cephems Cephalosporin I CEPH1 04a X Cephalothi 18900-1 162-8 161-0 7000-3 163-6 160-2 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 14 15-27 28 8 64 4 32 2 16 1 16 1 2
CEP KEF CF CTN CET Cephalothin CLSI,EUCAST X X X X X 23 30ug X Cephems Cephalosporin I CEPH1 04a X Cephalothi 18900-1 162-8 161-0 7000-3 163-6 160-2 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 11 12-17 18 8 64 4 32 17 18-26 27 2 16 13 14-26 27 1 16 26 - 27 1 2
HAP FAP CP CAP Cephapirin X 150 30ug X Cephems Cephalosporin I CEPH1 04a Cephapirin 18901-9 166-9 165-1 167-7 164-4
GEH GE2 Gentamicin-High BSAC X 318 200ug Aminoglycosides AG 09 X Gentamicin 18929-0 7017-7 7018-5 35817-6 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 250 501 500 1000
GEH GEH Gentamicin-High CLSI X 137 120ug Aminoglycosides AG 09 X Gentamicin 18929-0 7017-7 7018-5 35817-6 6 7-9 10 512 513 6 7-9 10 512 513 6 7-9 10 512 513 6 7-9 10 512 513 6 7-9 10 512 513 6 7-9 10 512 513 6 7-9 10 512 513 6 7-9 10 512 513 6 7-9 10 512 513 6 7-9 10 512 513 6 7-9 10 512 513 250 501 500 1000
GEH G30 Gentamicin-High EUCAST X X 488 30ug Aminoglycosides AG 09 X Gentamicin 18929-0 7017-7 7018-5 35817-6 512 513 512 513 512 513 512 513 512 513 512 513 512 513 512 513 512 513 512 513 512 513 250 501 500 1000
GRX GRE GRE GPFX Grepafloxacin CLSI X 141 5ug Quinolones Fluoroquinolone FQ 11b X Grepafloxa 23638-0 35818-4 23639-8 21316-5 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4
GRI GRI GRI GRF Griseofulvin NEO X 257 25ug Antifungals FUNG 29
HAB HAB HAB Habekacin 258 Aminoglycosides AG 09
CLO CLX CX MCIPC Cloxacillin 122 5ug X Penicillins Penicillin (Stable) PEN-S 01e Cloxacilli 18910-0 198-2 197-4 199-0 196-6 4 8
FOX FO6 FOX COX CFX Cefoxitin NEO X 342 60ug X Cephems Cephamycin CEPHAM 04e X Cefoxitin 18888-8 117-2 116-4 6991-4 25366-6 118-0 115-6 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 14 15-27 28 8 64 4 16 4 32 2 16 4 16 4 8
FOX FOX FOX COX CFX Cefoxitin 439 10ug X Cephems Cephamycin CEPHAM 04e X Cefoxitin 18888-8 117-2 116-4 6991-4 25366-6 118-0 115-6 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32
ZOP ZOP COP CZOP Cefozopran 156 X Cephems-Oral Cephalosporin CEPH-ORAL 05a
CFZ MIZ CFZ CMZ Cefpimizole 236 X Cephems Cephalosporin III CEPH3 04c
CPM CPM CPM CPM Cefpiramide 237 X Cephems Cephalosporin III CEPH3 04c
CPO PIR CPO CPI CPR Cefpirome SRGA,NEO X X X 72 30ug X Cephems Cephalosporin III CEPH3 04c Cefpirome 18889-6 8276-8 8275-0 6992-2 6650-6 8274-3 14 15-27 28 14 15-20 21 4 64 2 16 23 24-26 27 .5 2 1 2
CPO PI2 CPO CPI CPR Cefpirome BSAC X 310 20ug X Cephems Cephalosporin III CEPH3 04c Cefpirome 18889-6 8276-8 8275-0 6992-2 6650-6 8274-3 4 64 2 16 .5 2 24 - 25 1 2
COL CO1 CS COL CL Colistin NEO X 349 150ug Lipopeptides LIPOPEP 16 X Colistin 18912-6 206-3 205-5 33333-6 207-1 204-8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 12 13-21 22 2 4 0.5 4 4 8
COL COL CS COL CL Colistin CLSI,EUCAST X X X 28 10ug Lipopeptides LIPOPEP 16 X Colistin 18912-6 206-3 205-5 33333-6 207-1 204-8 10 - 11 0.001 4 10 - 11 2 8 10 11 2 8 10 11 2 8 10 11 2 8 10 11 2 8 10 11 2 8 10 11 2 8 10 11 2 8 10 11 2 8 10 11 2 8 2 4 2 4 0.5 4 4 8
COL CO5 CS COL CL Colistin X 194 50ug Lipopeptides LIPOPEP 16 X Colistin 18912-6 206-3 205-5 33333-6 207-1 204-8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 14 - 15 2 4 0.5 4 4 8
COL CO2 CS COL CL Colistin BSAC X 315 25ug Lipopeptides LIPOPEP 16 X Colistin 18912-6 206-3 205-5 33333-6 207-1 204-8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 4 0.5 4 14 - 15 4 8
CYC CYC CSE CS Cycloserine 129 Antimycobacterials MYCO 28 Cycloserin 18914-2 214-7 213-9 23608-3 215-4 212-1
DAL DAL Dalbavancin CLSI,EUCAST X X X 467 Glycopeptides Lipoglycopeptide GLYCO 21b X Dalbavanci 41734-5 41688-3 41689-1 41690-9
DAN DFX DFX DAN Danofloxacin CLSI X 247 5ug Quinolones Fluoroquinolone FQ 11b X 73601-7 73646-2 73623-1
DAP DAP DPT Daptomycin CLSI X 395 30ug Lipopeptides LIPOPEP 16 X Daptomycin 35789-7 35787-1 35788-9 41691-7 1 1 1 1 1 1 1 1 1 1 1
DEM DEM DM DMCTC Demeclocycline 160 Tetracyclines TETRA 24 Demeclocyc 18915-9 218-8 217-0 7006-0 219-6 216-2
DKB DIB DKB DIB DKB Dibekacin X 29 10ug Aminoglycosides AG 09 13 14-15 16 4 16
DIC DIC DX DIC MDIPC Dicloxacillin DIN X 123 5ug X Penicillins Penicillin (Stable) PEN-S 01e Dicloxacil 18916-7 222-0 221-2 223-8 220-4 1 2
DIF DIF DIF Difloxacin CLSI X 248 10ug Quinolones Fluoroquinolone FQ 11b X Difloxacin 35792-1 35790-5 35791-3 17 18-20 21 .5 4 17 18-20 21 .5 4 17 18-20 21 .5 4 17 18-20 21 .5 4 17 18-20 21 .5 4 17 18-20 21 .5 4 17 18-20 21 .5 4 17 18-20 21 .5 4 17 18-20 21 .5 4 17 18-20 21 .5 4 17 18-20 21 .5 4
DIR DIR DIR Dirithromycin CLSI X X 104 15ug Macrolides MACRO 17a X Dirithromy 35795-4 35793-9 35794-7 7007-8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-27 28 .125 8
CPD PO3 CPD CPO CPDX Cefpodoxime SRGA,NEO X X 188 30ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefpodoxim 18890-4 121-4 120-6 6993-0 122-2 119-8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 1 4 23 24-26 27 1 4 1 2
CPD POD CPD CPO CPDX Cefpodoxime CLSI,EUCAST X X X 87 10ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefpodoxim 18890-4 121-4 120-6 6993-0 122-2 119-8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 17 18-20 21 2 8 20 21 1 2 20 21-23 24 1 4 1 4 1 2
CPX CPX CPP CPDX-PR Cefpodoxime proxetil DIN X X 238 10ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a 20 21-23 24 1 4 18 19-24 25 1 8
CDC CDC CPDX-CVA Cefpodoxime/Clavulanic acid 429 X Beta-lactam+Inhibitors BL+INH 03 Cefpodoxim 41731-1 41680-0 41679-2 41678-4
CPR PRO CPR CPY Cefprozil CLSI X 102 30ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a X Cefprozil 18891-2 125-5 124-8 6994-8 126-3 123-0 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32
CEQ CEQ Cefquinome 481 X Cephems Cephalosporin ? CEPH? 04d
CRD CRD CRD CXD Cefroxadine 239 X Cephems Cephalosporin I CEPH1 04a
DOR DOR DRPM Doripenem CLSI,EUCAST X X X 451 10ug X Penems Carbapenems CARB 07a X Doripenem 60535-2 72893-1 56031-8 58711-3 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 17 18-23 24 1 8
DOX DOX DO DOX DOXY Doxycycline CLSI,SRGA,BSAC X X X X X 30 30ug Tetracyclines TETRA 24a X Doxycyclin 18917-5 226-1 225-3 7008-6 20379-4 23623-2 227-9 224-6 10 11-13 14 4 16 10 11-13 14 4 16 10 11-13 14 4 16 10 11-13 14 4 16 10 11-13 14 4 16 10 11-13 14 4 16 10 11-13 14 4 16 10 11-13 14 4 16 10 11-13 14 4 16 10 11-13 14 4 16 10 11-13 14 4 16 16 17-18 19 4 16 1 8 19 20-24 25 1 4 19 20-22 23 1 2 28 - 29 1 2
DOX DO8 DO DOX DOXY Doxycycline NEO X 350 80ug Tetracyclines TETRA 24 X Doxycyclin 18917-5 226-1 225-3 7008-6 20379-4 23623-2 227-9 224-6 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 1 8 1 4 1 2 1 2
ECO ECO ECO Econazole NEO X 351 10ug Antifungals FUNG 29 Econazole 25595-0 25637-0
ENX EN5 ENX ENO ENX Enoxacin DIN X X 249 5ug Quinolones Fluoroquinolone FQ 11b X Enoxacin 18918-3 230-3 229-5 41692-5 231-1 228-7 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 18 19-21 22 1 4 16 17-20 21 1 4
ENX ENX ENX ENO ENX Enoxacin CLSI X 31 10ug Quinolones Fluoroquinolone FQ 11b X Enoxacin 18918-3 230-3 229-5 41692-5 231-1 228-7 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 1 4 1 4
GRN GRN Garenoxacin CLSI X 491 5ug Quinolones Quinolone QUIN 11a X Garenoxaci 35813-5 35811-9 35812-7
GAT GA2 GAT GFLX Gatifloxacin 412 2ug Quinolones Fluoroquinolone FQ 11b X Gatifloxac 31038-3 31040-9 31036-7 31042-5 41494-6 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 1 4 1 4 1 2
GAT GAT GAT GFLX Gatifloxacin CLSI,DIN X X X 256 5ug Quinolones Fluoroquinolone FQ 11b X Gatifloxac 31038-3 31040-9 31036-7 31042-5 41494-6 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 14 15-17 18 2 8 17 18-20 21 1 4 17 18-22 23 1 4 1 2
GEM GEM GEM Gemifloxacin CLSI X 393 5ug Quinolones Fluoroquinolone FQ 11b X Gemifloxac 35816-8 35814-3 35815-0 41697-4 15 16-19 20 .25 1 15 16-19 20 .25 1 15 16-19 20 .25 1 15 16-19 20 .25 1 15 16-19 20 .25 1 15 16-19 20 .25 1 15 16-19 20 .25 1 15 16-19 20 .25 1 15 16-19 20 .25 1 15 16-19 20 .25 1 15 16-19 20 .25 1 1 2
GEM GX1 GEM Gemifloxacin X 413 1ug Quinolones Fluoroquinolone FQ 11b X Gemifloxac 35816-8 35814-3 35815-0 41697-4 .25 1 .25 1 .25 1 .25 1 .25 1 .25 1 .25 1 .25 1 .25 1 .25 1 .25 1 19 - 20 1 2
GEN GE1 GM GEN GM Gentamicin X 196 15ug Aminoglycosides AG 09 X Gentamicin 18928-2 268-3 267-5 7016-9 269-1 266-7 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 15 16-17 18 2 8 1 8 1 8 2 8 2 4 1 2
JOS JOS JM JOS JM Josamycin 115 100ug Macrolides MACRO 17 Josamycine 25597-6 41698-2 25702-2 41699-0
GEN GEN GM GEN GM Gentamicin CLSI,EUCAST X X X X X 35 10ug Aminoglycosides AG 09 X Gentamicin 18928-2 268-3 267-5 7016-9 269-1 266-7 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 13 14-16 17 2 8 4 16 14 15-20 21 1 8 1 8 2 8 2 4 19 - 20 1 2
GEN GE4 GM GEN GM Gentamicin NEO X 358 40ug Aminoglycosides AG 09 X Gentamicin 18928-2 268-3 267-5 7016-9 269-1 266-7 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 14 15-25 26 4 16 1 8 1 8 2 8 2 4 1 2
GEN GE3 GM GEN GM Gentamicin AFA,SRGA,EUCAST(Enterococcus) X X 197 30ug Aminoglycosides AG 09 X Gentamicin 18928-2 268-3 267-5 7016-9 269-1 266-7 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 1 8 1 8 18 19-21 22 2 8 17 18-20 21 2 4 1 2
GEH GH2 Gentamicin-High NEO X 359 250ug Aminoglycosides AG 09 X Gentamicin 18929-0 7017-7 7018-5 35817-6 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 250 501 500 1000
GEH GE5 Gentamicin-High X 198 500ug Aminoglycosides AG 09 X Gentamicin 18929-0 7017-7 7018-5 35817-6 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 500 501 10 11-16 17 250 501 500 1000
HET HET H Hetacillin 259 X Penicillins Aminopenicillin PEN 01b Hetacillin 18931-6 276-6 275-8 277-4 274-1
HYG HYG Hygromycin 414 Aminoglycosides AG 09
ICL ICL Iclaprim CLSI X 476 5ug Folate pathway inhibitors FOLATE 12a X 73597-7 73642-1 73619-9
IPM IMP IPM IMP Imipenem CLSI,EUCAST X X X X X X X 36 10ug X Penems Carbapenems CARB 07a X Imipenem 18932-4 280-8 279-0 7019-3 23613-3 281-6 278-2 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 13 14-15 16 4 16 14 15-20 21 2 16 16 17-21 22 4 16 19 20-22 23 2 8 2 16 22 23-25 26 4 16 16 17-22 23 1 16 22 - 23 4 8
IPM IM1 IPM IMP IPM/CS Imipenem NEO X 360 15ug X Penems Carbapenems CARB 07a X Imipenem 18932-4 280-8 279-0 7019-3 23613-3 281-6 278-2 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 12 13-25 26 4 16 4 16 4 8
IPE IPE Imipenem/EDTA 433 X Penems Carbapenems CARB 07a 35819-2
ISE ISE ISP ISE ISP Isepamicin X 75 30ug Aminoglycosides AG 09 Isepamicin 32381-6 35820-0 35821-8 14 15-16 17 8 32
ISO ISO ISL Isoconazole NEO X 165 10ug Antifungals FUNG 29
INH INH INH INH Isoniazid 132 Antimycobacterials MYCO 28 Isoniazid 18934-0 288-1 287-3 7020-1 20383-6 23947-5 289-9 286-5
ENR EN1 ENR Enrofloxacin NEO X 352 10ug Quinolones Fluoroquinolone FQ 11b Enrofloxac 23712-3 35797-0 35798-8 35796-2 .25 2 .25 2 .25 2 .25 2 .25 2 .25 2 .25 2 .25 2 .25 2 .25 2 .25 2
ENR ENR ENR Enrofloxacin CLSI X 161 5ug Quinolones Fluoroquinolone FQ 11b X Enrofloxac 23712-3 35797-0 35798-8 35796-2 16 17-22 23 .25 2 16 17-22 23 .25 2 16 17-22 23 .25 2 16 17-22 23 .25 2 16 17-22 23 .25 2 16 17-22 23 .25 2 16 17-22 23 .25 2 16 17-22 23 .25 2 16 17-22 23 .25 2 16 17-22 23 .25 2 16 17-22 23 .25 2
ENV ENV EVM Enviomycin (Tuberactinomycin) 452 Antimycobacterials MYCO 28
EPE EPE Eperozolid 250 Oxazolidinones OXAZOLID 20
EPP EPP EPP Epiroprim 251 Folate pathway inhibitors FOLATE 12a
ETP ETP ERT Ertapenem CLSI,EUCAST X X X 401 10ug X Penems Carbapenems CARB 07a X Ertapenem 35802-8 35799-6 35801-0 35800-2 18 19-21 22 .5 2 18 19-21 22 .5 2 18 19-21 22 .5 2 18 19-21 22 .5 2 18 19-21 22 .5 2 18 19-21 22 .5 2 18 19-21 22 .5 2 18 19-21 22 .5 2 18 19-21 22 .5 2 19 20-22 23 .25 1 15 16-18 19 2 8 21 22-24 25 0.5 2 19 20-22 23 2 8
ERY ER5 E ERY EM Erythromycin BSAC X 316 5ug Macrolides MACRO 17 X Erythromyc 18919-1 234-5 233-7 7009-4 20380-2 23633-1 235-2 232-9 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 1 8 1 8 1 4 1 4 .5 1 19 - 20 .5 1
ERY ERY E ERY EM Erythromycin CLSI,EUCAST X X X X X X 32 15ug Macrolides 14-Membered ring MACRO 17a X Erythromyc 18919-1 234-5 233-7 7009-4 20380-2 23633-1 235-2 232-9 13 14-22 23 .5 8 13 14-22 23 .5 8 13 14-22 23 .5 8 13 14-22 23 .5 8 13 14-22 23 .5 8 13 14-22 23 .5 8 13 14-22 23 .5 8 13 14-22 23 .5 8 13 14-22 23 .5 8 13 14-22 23 .5 8 13 14-22 23 .5 8 16 17-21 22 1 8 16 17-20 21 1 8 1 4 19 20-23 24 1 4 19 20-24 25 .5 1 .5 1
ERY ER7 E ERY EM Erythromycin NEO X 353 78ug Macrolides 14-Membered ring MACRO 17 X Erythromyc 18919-1 234-5 233-7 7009-4 20380-2 23633-1 235-2 232-9 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 .5 8 14 15-27 28 1 8 1 8 1 4 1 4 .5 1 .5 1
ETH ETH EB EMB EB Ethambutol 130 Antimycobacterials MYCO 28 Ethambutol 18921-7 242-8 241-0 7010-2 20381-0 23625-7 243-6 240-2
ETI ETI EA ETH ETH Ethionamide 131 Antimycobacterials MYCO 28 Ethionamid 18922-5 41693-3 16099-4 7011-0 20382-8 23617-4
ETO ETO Ethopabate 411 Coccidiostats COCC 27
FAR FAR FAR FRPM Faropenem CLSI X 428 5ug X Penems Penem PENEM 07b X 73600-9 73645-4 73622-3
FDX FDX Fidaxomicin CLSI X 487 17 X 73599-3 73644-7 73621-5
FIN FIN Finafloxacin CLSI X 500 Quinolones Fluoroquinolone FQ 11b X 73598-5 73643-9 73620-7
FLA FLA Flavomycin 252 Flavophospholipols FLAVO 27
FLE FL1 FLE FLO FLRX Fleroxacin NEO X 354 10ug Quinolones Fluoroquinolone FQ 11b X Fleroxacin 32372-5 35806-9 25411-0 7012-8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 1 8
FLE FLE FLE FLO FLRX Fleroxacin CLSI,DIN X X 105 5ug Quinolones Fluoroquinolone FQ 11b X Fleroxacin 32372-5 35806-9 25411-0 7012-8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 15 16-18 19 2 8 12 13-23 24 14 15-21 22 1 8
FLO FLO FLO FLX FMOX Flomoxef 162 X Cephems Oxacephem OXACEPH 04f
FLR FLR FLF Florfenicol CLSI X 253 30ug Phenicols PHEN 22 X Florfenico 23740-4 35807-7 35808-5 14 15-18 19 2 8 14 15-18 19 2 8 14 15-18 19 2 8 14 15-18 19 2 8 14 15-18 19 2 8 14 15-18 19 2 8 14 15-18 19 2 8 14 15-18 19 2 8 14 15-18 19 2 8 14 15-18 19 2 8 14 15-18 19 2 8
FLC FLC FU FLU Flucloxacillin DIN X 163 X Penicillins Penicillin (Stable) PEN-S 01e 1 2 4 8
FLU FL2 FCA FLCZ Fluconazole CLSI,NEO X X 443 25ug Antifungals FUNG 29 X Fluconazol 18924-1 250-1 249-3 7013-6 251-9 248-5 14 15-18 19 8 64 14 15-18 19 8 64 14 15-18 19 8 64 14 15-18 19 8 64 14 15-18 19 8 64 14 15-18 19 8 64 14 15-18 19 8 64 14 15-18 19 8 64 14 15-18 19 8 64
FLM FLM UB FLM Flumequine X 88 30ug Quinolones Quinolone QUIN 11a 20 21-24 25 4 16
FFL FFL F-FLCZ Fosfluconazole 453 Antifungals FUNG 29
FOS FO7 FOS FOS FOM Fosfomycin NEO X 355 70ug Fosfomycins Fosfomycin FOSFO 13 X Fosfomycin 25596-8 35810-1 25653-7 35809-3 64 256 64 256 64 256 64 256 64 256 64 256 64 256 64 256 64 256 12 13-17 18 32 64 128 256
FOS FO2 FOS FOS FOM Fosfomycin BSAC 317 20ug Fosfomycins Fosfomycin FOSFO 13 X Fosfomycin 25596-8 35810-1 25653-7 35809-3 64 256 64 256 64 256 64 256 64 256 64 256 64 256 64 256 64 256 32 64 128 256
FOS FOS FOS FOS FOM Fosfomycin CLSI,EUCAST X X X X 254 200ug Fosfomycins Fosfomycin FOSFO 13 X Fosfomycin 25596-8 35810-1 25653-7 35809-3 12 13-15 16 64 256 12 13-15 16 64 256 12 13-15 16 64 256 12 13-15 16 64 256 12 13-15 16 64 256 12 13-15 16 64 256 12 13-15 16 64 256 12 13-15 16 64 256 12 13-15 16 64 256 32 64 32 64 19 - 20 128 256
FOS FO5 FOS FOS FOM Fosfomycin X 33 50ug Fosfomycins Fosfomycin FOSFO 13 X Fosfomycin 25596-8 35810-1 25653-7 35809-3 64 256 64 256 64 256 64 256 64 256 64 256 64 256 64 256 64 256 13 - 14 32 64 128 256
FMD FMD FMD Fosmidomycin 255 Fosfomycins Fosfomycin FOSFO 13
FRM FRM FY FRA Framycetin 164 30ug Aminoglycosides AG 09 Framycetin 18926-6 259-2 258-4 260-0 257-6
FRZ FRZ FUR Furazolidone 434 100ug Nitrofurans FURAN 18
FRZ FRZ FUR Furazolidone NEO X 356 50ug Nitrofurans FURAN 18
FUS FU5 FA FUS FA Fusidic acid AFA,SRGA X X 195 50ug Steroidals Fusidane FUSID 26 X Fusidate 18927-4 263-4 262-6 7015-1 264-2 261-8 2 32 1 2 32 - 33 .5 1 26 27-29 30 .5 1 1 2
FUS FUS FA FUS FA Fusidic acid EUCAST X X X X 34 10ug Steroidals Fusidane FUSID 26 X Fusidate 18927-4 263-4 262-6 7015-1 264-2 261-8 14 15-21 22 2 32 1 2 .5 1 .5 1 29 - 30 1 2
FUS F00 FA FUS FA Fusidic acid NEO X 357 100ug Steroidals Fusidane FUSID 26 X Fusidate 18927-4 263-4 262-6 7015-1 264-2 261-8 14 15-27 28 2 32 1 2 .5 1 .5 1 1 2
KAN KAN K KAN KM Kanamycin CLSI X X 37 30ug Aminoglycosides AG 09 X Kanamycin 18935-7 292-3 291-5 7022-7 23609-1 293-1 290-7 13 14-17 18 16 64 13 14-17 18 16 64 13 14-17 18 16 64 13 14-17 18 16 64 13 14-17 18 16 64 13 14-17 18 16 64 13 14-17 18 16 64 13 14-17 18 16 64 13 14-17 18 16 64 13 14-17 18 16 64 13 14-17 18 16 64 14 15-16 17 8 32 4 32
KAN KA1 K KM Kanamycin NEO X 361 100ug Aminoglycosides AG 09 X Kanamycin 18935-7 292-3 291-5 7022-7 23609-1 293-1 290-7 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 16 64 14 15-27 28 8 32 4 32
KAH KAH Kanamycin-High CLSI X X 138 1000ug Aminoglycosides AG 09 X Kanamycin. 18936-5 7023-5 7024-3 9 10-13 14 250 501
KAH KH5 Kanamycin-High NEO X 362 500ug Aminoglycosides AG 09 X Kanamycin. 18936-5 7023-5 7024-3 250 501
KET KET KET KCZ Ketoconazole NEO X 134 15ug Antifungals FUNG 29 Ketoconazo 18937-3 296-4 295-6 7025-0 297-2 294-9
KIT KIT LU LM Kitasamycin (Leucomycin) 116 Macrolides MACRO 17
LAS LAS Lasalocid 415 Combinations Coccidiostat/Ionophore OTHER 28
LEN LEN LEN LAPC Lenampicillin 454 X Penicillins Aminopenicillin PEN 01b
LVX LEV LEV LVFX Levofloxacin CLSI,EUCAST X X X X X 142 5ug Quinolones Fluoroquinolone FQ 11b X Levofloxac 20629-2 21367-8 20396-8 7026-8 16 17-20 21 0.5 2 16 17-20 21 0.5 2 13 14-16 17 2 8 13 14-16 17 2 8 13 14-16 17 2 8 13 14-16 17 2 8 13 14-16 17 2 8 13 14-16 17 2 8 13 14-16 17 2 8 13 14-16 17 2 8 13 14-16 17 2 8 18 19-21 22 1 4 16 17-19 20 1 4 2 4 2 4
LVX LE1 LEV LVFX Levofloxacin BSAC X 319 1ug Quinolones Fluoroquinolone FQ 11b X Levofloxac 20629-2 21367-8 20396-8 7026-8 0.5 2 0.5 2 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 1 8 2 4 19 - 20 2 4
LIN LIN L LIN LCM Lincomycin AFA X X 38 15ug Lincosamides LINCO 15 Lincomycin 18938-1 300-4 299-8 41700-6 301-2 298-0 16 17-20 21 2 16 17 18-23 24 1 4
LIN LI1 L LIN LCM Lincomycin NEO X 363 19ug Lincosamides LINCO 15 Lincomycin 18938-1 300-4 299-8 41700-6 301-2 298-0 14 15-27 28 2 16 1 4
LSP LSP Linco-spectin (lincomycin/spectinomycin) NEO X 364 15/200ug Combinations Lincosamide/Aminocyclitol OTHER 28
LNZ LNZ LIZ LZD Linezolid CLSI X X 260 30ug Oxazolidinones OXAZOLID 20 X Linezolid 29258-1 29255-7 29254-0 33332-8 41500-0 20 - 21 4 8 20 - 21 4 8 20 21 4 8 20 21 4 8 20 21 4 8 20 21 4 8 20 21 4 8 20 21 4 8 20 21 4 8 20 21 4 8 20 21 4 8 23 24-27 28 2 8 2 4
LNZ LN1 LIZ LZD Linezolid EUCAST X X X 416 10ug Oxazolidinones OXAZOLID 20 X Linezolid 29258-1 29255-7 29254-0 33332-8 41500-0 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 2 8 22 - 23 2 4
LFE LFE Linoprist-flopristin CLSI X 483 10ug Streptogramins STREPTOG 23 X 55292-7 55294-3 55293-5
LOM LOM LOM LOM LFLX Lomefloxacin CLSI X 107 10ug Quinolones Fluoroquinolone FQ 11b X Lomefloxac 18939-9 304-6 303-8 41701-4 305-3 302-0 18 19-21 22 2 8 18 19-21 22 2 8 18 19-21 22 2 8 18 19-21 22 2 8 18 19-21 22 2 8 18 19-21 22 2 8 18 19-21 22 2 8 18 19-21 22 2 8 18 19-21 22 2 8 18 19-21 22 2 8 18 19-21 22 2 8 1 4
LOM LO5 LOM LOM LFLX Lomefloxacin X 261 5ug Quinolones Fluoroquinolone FQ 11b X Lomefloxac 18939-9 304-6 303-8 41701-4 305-3 302-0 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 18 19-21 22 1 4
LOR LOR LOR LCBF Loracarbef CLSI,DIN X X 108 30ug X Cephems-Oral Carbacephem CEPH-ORAL 05b X Loracarbef 18940-7 308-7 307-9 7027-6 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 14 15-17 18 8 32 2 16 20 21-25 26 2 16 19 20-22 23 2 8
LOR LO1 LOR LCBF Loracarbef X 262 10ug X Cephems-Oral Cephalosporin CEPH-ORAL 05a Loracarbef 18940-7 308-7 307-9 7027-6 309-5 306-1 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 14 15-22 23 2 16 2 16 2 8
MAR MAR MAR Marbofloxacin CLSI X 468 5ug Quinolones Fluoroquinolone FQ 11b X 73596-9 73641-3 73618-1 14 15-19 20 1 4 14 15-19 20 1 4 14 15-19 20 1 4 14 15-19 20 1 4 14 15-19 20 1 4 14 15-19 20 1 4
MEC ME4 MEC MCL Mecillinam (Amdinocillin) NEO X 365 33ug X Penicillins Amidinopenicillin PEN 01f X Amdinocill 18859-9 9-1 8-3 7028-4 10-9 7-5 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 14 15-27 28 2 16 1 16 1 16 1 16
MEC MEC MEC MCL Mecillinam (Amdinocillin) CLSI,EUCAST X X X X X X 80 10ug X Penicillins Amidinopenicillin PEN 01f X Amdinocill 18859-9 9-1 8-3 7028-4 10-9 7-5 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 11 12-14 15 8 32 14 15 8 16 17 18-21 22 2 16 14 15-23 24 1 16 13 14-23 24 1 16 13 14-23 24 1 16
MEL MEL Meleumycin 117 Macrolides MACRO 17
MEM MER MEM MER MEPM Meropenem CLSI,EUCAST X X X X X X X 109 10ug X Penems Carbapenems CARB 07a X Meropenem 18943-1 6653-0 6652-2 7029-2 6654-8 6651-4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 19 20-22 23 1 4 13 14-15 16 4 16 15 16-21 22 2 16 16 17-19 20 14 15-19 20 4 16 13 14-21 22 2 16 16 17-22 23 4 16 19 20-28 29 .125 16 22 - 23 4 8
MES MES MES Mesulfamide 263 Folate pathway inhibitors FOLATE 12a 4 8
MET MET ME MET Methicillin CLSI,BSAC X X 39 5ug X Penicillins Penicillin (Stable) PEN-S 01e X Methicilli 18945-6 324-4 323-6 7030-0 325-1 322-8 9 10-13 14 8 16 9 10-13 14 8 16 9 10-13 14 8 16 9 10-13 14 8 16 9 10-13 14 8 16 9 10-13 14 8 16 9 10-13 14 8 16 9 10-13 14 8 16 9 10-13 14 8 16 9 10-13 14 8 16 9 10-13 14 8 16 13 - 14 4 8
MET ME2 ME MET Methicillin NEO X 366 29ug X Penicillins Penicillin (Stable) PEN-S 01e X Methicilli 18945-6 324-4 323-6 7030-0 325-1 322-8 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 14 15-27 28 4 8
MTP MTP MTP Metioprim 264 Folate pathway inhibitors FOLATE 12a
MXT MXT MXT Metioxate 265 Quinolones Quinolone QUIN 11a
MTR MTR MTR MTR Metronidazole SRGA X 76 4ug Nitroimidazoles IMIDAZ 19 Metronidaz 18946-4 328-5 327-7 7031-8 329-3 326-9 4 32 4 8 4 16
MTR MT1 MTR MTR Metronidazole NEO X X 367 16ug Nitroimidazoles IMIDAZ 19 X Metronidaz 18946-4 328-5 327-7 7031-8 329-3 326-9 20 - 21 4 32 4 8 4 16
MTR MTR MTR MTR Metronidazole 430 5ug Nitroimidazoles IMIDAZ 19 X Metronidaz 18946-4 328-5 327-7 7031-8 329-3 326-9 4 32 4 8 4 16
MTR ME1 MTR MTR Metronidazole EUCAST X X 199 10ug Nitroimidazoles IMIDAZ 19 X Metronidaz 18946-4 328-5 327-7 7031-8 329-3 326-9 4 32 4 8 4 16
MEZ MEZ MZ MZL Mezlocillin CLSI,BSAC X X X 40 75ug X Penicillins Ureidopenicillin PEN 01c X Mezlocilli 18947-2 332-7 331-9 41702-2 333-5 330-1 17 18-20 21 16 128 17 18-20 21 16 128 15 16-20 21 8 64 4 32 4 8 21 - 22 16 32
MEZ ME3 MZ MZL Mezlocillin DIN X 266 30ug X Penicillins Ureidopenicillin PEN 01c X Mezlocilli 18947-2 332-7 331-9 41702-2 333-5 330-1 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 8 64 16 17-22 23 4 32 4 8 16 32
MSU MSU MZS Mezlocillin/Sulbactam DIN X 267 30/15ug X Beta-lactam+Inhibitors BL+INH 03 16 17-21 22 4 32
MIF MIF Micafungin CLSI X 455 10ug Antifungals FUNG 29
MCZ MCZ MCZ MCZ MCZ Miconazole NEO X 268 10ug Antifungals FUNG 29 Miconazole 25607-3 25722-0
MCR MCR MCR MCR MCR Micronomicin 269 Aminoglycosides AG 09
MID MID MID MDM Midecamycin 118 100ug Macrolides MACRO 17
MIL MIL MIL Miloxacin 270 Quinolones Quinolone QUIN 11a
MNO MIN MNO MNO MINO Minocycline CLSI,EUCAST X X X 41 30ug Tetracyclines TETRA 24a X Minocyclin 18948-0 336-8 335-0 7032-6 337-6 334-3 12 13-15 16 4 16 12 13-15 16 4 16 12 13-15 16 4 16 12 13-15 16 4 16 12 13-15 16 4 16 12 13-15 16 4 16 12 13-15 16 4 16 12 13-15 16 4 16 12 13-15 16 4 16 12 13-15 16 4 16 12 13-15 16 4 16 16 17-18 19 4 16 1 8
MNO MI8 MNO MNO MINO Minocycline NEO X 368 80ug Tetracyclines TETRA 24 X Minocyclin 18948-0 336-8 335-0 7032-6 337-6 334-3 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 1 8
MON MON Monensin sodium 417 Combinations Coccidiostat/Ionophore OTHER 28
MOX MOX MOX LMO LMOX Moxalactam (Latamoxef) CLSI X X 42 30ug X Cephems Oxacephem OXACEPH 04f X Moxalactam 18950-6 344-2 343-4 41703-0 345-9 342-6 14 15-22 23 8 64 14 15-22 23 8 64 14 15-22 23 8 64 14 15-22 23 8 64 14 15-22 23 8 64 14 15-22 23 8 64 14 15-22 23 8 64 14 15-22 23 8 64 14 15-22 23 8 64 14 15-22 23 8 64 14 15-22 23 8 64 16 17-22 23 4 64
MFX MF1 MOX MFLX Moxifloxacin X 418 1ug Quinolones Fluoroquinolone FQ 11b X Moxifloxac 31039-1 31041-7 31037-5 31043-3 41502-6 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 1 4 1 4 19 - 20 1 2
MFX MFX MOX MFLX Moxifloxacin CLSI,EUCAST X X X X X 392 5ug Quinolones Fluoroquinolone FQ 11b X Moxifloxac 31039-1 31041-7 31037-5 31043-3 41502-6 20 21-23 24 .5 2 20 21-23 24 .5 2 20 21-23 24 .5 2 20 21-23 24 .5 2 20 21-23 24 .5 2 20 21-23 24 .5 2 20 21-23 24 .5 2 20 21-23 24 .5 2 20 21-23 24 .5 2 20 21-23 24 .5 2 20 21-23 24 .5 2 16 17-19 20 0.5 2 20 21-23 24 .5 2 18 19-21 22 1 4 1 2
MUP MUP MUP MUP Mupirocin CLSI,NEO X X 124 10ug Pseudomonic acids PSEUDOM 27 X Mupirocin 20389-3 35822-6 35823-4 7033-4 19 - 20 2 4 8
MUP MU5 MUP MUP Mupirocin BSAC X X 419 5ug Pseudomonic acids PSEUDOM 27 X Mupirocin 20389-3 35822-6 35823-4 7033-4 19 2 21 - 22 4 8
NAD NAD NDFX Nadifloxacin 456 Quinolones Fluoroquinolone FQ 11b
NAF NAF NF NCL Nafcillin CLSI X 43 1ug X Penicillins Penicillin (Stable) PEN-S 01e X Nafcillin 18951-4 348-3 347-5 41704-8 349-1 346-7 10 11-12 13 2 4 10 11-12 13 2 4 10 11-12 13 2 4 10 11-12 13 2 4 10 11-12 13 2 4 10 11-12 13 2 4 10 11-12 13 2 4 10 11-12 13 2 4 10 11-12 13 2 4 10 11-12 13 2 4 10 11-12 13 2 4
NAL NAL NA NAL NA Nalidixic acid CLSI,EUCAST X X X X 44 30ug Quinolones Quinolone QUIN 11a X Nalidixate 18952-2 352-5 351-7 7034-2 353-3 350-9 13 14-18 19 16 32 13 14-18 19 16 32 13 14-18 19 16 32 13 14-18 19 16 32 13 14-18 19 16 32 13 14-18 19 16 32 13 14-18 19 16 32 13 14-18 19 16 32 13 14-18 19 16 32 13 14-18 19 16 32 13 14-18 19 16 32 15 16 16 32 14 15-19 20 8 32 14 - 15 16 32 15 16-19 20 8 32
NAL NA1 NA NAL NA Nalidixic acid NEO X 369 130ug Quinolones Quinolone QUIN 11a X Nalidixate 18952-2 352-5 351-7 7034-2 353-3 350-9 16 32 16 32 16 32 16 32 16 32 16 32 16 32 16 32 16 32 16 32 16 32 14 15-27 28 8 32 16 32
NAR NAR Narasin 402 Combinations Coccidiostat/Ionophore OTHER 28
NEO NEO N NEO FRM Neomycin CLSI X 45 30ug Aminoglycosides AG 09 X Neomycin 18953-0 356-6 355-8 41705-5 357-4 354-1
NEO NE0 NEO FRM Neomycin X 420 10ug Aminoglycosides AG 09 X Neomycin 18953-0 356-6 355-8 41705-5 357-4 354-1 16 - 17
NEO NE2 N NEO FRM Neomycin NEO X 370 120ug Aminoglycosides AG 09 X Neomycin 18953-0 356-6 355-8 41705-5 357-4 354-1 14 15-27 28
NET NET NET NET NTL Netilmicin CLSI,SRGA X X X X 46 30ug Aminoglycosides AG 09 X Netilmicin 18954-8 360-8 359-0 7035-9 361-6 358-2 12 13-14 15 8 32 12 13-14 15 8 32 12 13-14 15 8 32 12 13-14 15 8 32 12 13-14 15 8 32 12 13-14 15 8 32 12 13-14 15 8 32 12 13-14 15 8 32 12 13-14 15 8 32 12 13-14 15 8 32 12 13-14 15 8 32 18 19-20 21 2 8 1 8 2 16 18 19-21 22 2 8 17 18-20 21 2 4 1 2
NET NE1 NET NET NTL Netilmicin EUCAST X X X X 271 10ug Aminoglycosides AG 09 X Netilmicin 18954-8 360-8 359-0 7035-9 361-6 358-2 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 11 12-14 15 2 8 4 16 16 17-21 22 1 8 2 16 2 8 2 4 24 - 25 1 2
NET NE4 NET NET NTL Netilmicin NEO X 371 40ug Aminoglycosides AG 09 X Netilmicin 18954-8 360-8 359-0 7035-9 361-6 358-2 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 14 15-25 26 4 16 1 8 2 16 2 8 17 18-20 21 2 4 1 2
NIC NIC Nicarbazin 421 Coccidiostats COCC 27
NIF NIF NIF Nifuroquine 272 Quinolones Quinolone QUIN 11a
NTZ NTZ Nitazoxanide CLSI X 492 Thiazolides THIAZ 30 73595-1 73640-5 73617-3
NIT FU0 FT NFT Nitrofurantoin BSAC 327 50ug Nitrofurans FURAN 18 X Nitrofuran 18955-5 364-0 363-2 7036-7 365-7 362-4 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 256 64 512 32 64 16 32 32 64 32 64
NIT FU6 FT NFT Nitrofurantoin NEO X 372 260ug Nitrofurans FURAN 18 X Nitrofuran 18955-5 364-0 363-2 7036-7 365-7 362-4 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 14 15-27 28 32 256 64 512 32 64 16 32 32 64 32 64
NIT FU1 FT NFT Nitrofurantoin EUCAST X X X X X 200 100ug Nitrofurans FURAN 18 X Nitrofuran 18955-5 364-0 363-2 7036-7 365-7 362-4 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 10 11 64 128 32 256 10 11-15 16 64 512 32 64 18 - 19 16 32 13 14-16 17 32 64 32 64
NIT FUR FT NFT Nitrofurantoin CLSI X X 47 300ug Nitrofurans FURAN 18 X Nitrofuran 18955-5 364-0 363-2 7036-7 365-7 362-4 14 15-16 17 32 128 14 15-16 17 32 128 14 15-16 17 32 128 14 15-16 17 32 128 14 15-16 17 32 128 14 15-16 17 32 128 14 15-16 17 32 128 14 15-16 17 32 128 14 15-16 17 32 128 14 15-16 17 32 128 14 15-16 17 32 128 13 14-16 17 32 256 64 512 32 64 16 32 32 64 32 64
NIT FU2 FT NFT Nitrofurantoin BSAC X 320 200ug Nitrofurans FURAN 18 X Nitrofuran 18955-5 364-0 363-2 7036-7 365-7 362-4 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 256 64 512 32 64 16 32 32 64 19 - 20 32 64
NIZ NIZ FC Nitrofurazone 166 Nitrofurans FURAN 18
NTR NIT NI NIT Nitroxoline X 89 20ug Quinolones Quinolone QUIN 11a Nitroxolin 25608-1 25723-8 11 12-29 30 1 64
NOR NOR NOR NOR NFLX Norfloxacin CLSI,EUCAST X X X X X 48 10ug Quinolones Fluoroquinolone FQ 11b X Norfloxaci 18956-3 368-1 367-3 7037-5 41504-2 369-9 366-5 12 13-16 17 4 16 12 13-16 17 4 16 12 13-16 17 4 16 12 13-16 17 4 16 12 13-16 17 4 16 12 13-16 17 4 16 12 13-16 17 4 16 12 13-16 17 4 16 12 13-16 17 4 16 18 19-21 22 0.5 2 12 13-25 26 1 4 23 24-26 27 1 4 1 4 17 18-23 24 .5 2 4 8
NOR NO5 NOR NOR NFLX Norfloxacin X 201 5ug Quinolones Fluoroquinolone FQ 11b X Norfloxaci 18956-3 368-1 367-3 7037-5 41504-2 369-9 366-5 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 21 22-24 25 .5 2 1 4 1 4 .5 2 4 8
NOR NO2 NOR NOR NFLX Norfloxacin BSAC X 321 2ug Quinolones Fluoroquinolone FQ 11b X Norfloxaci 18956-3 368-1 367-3 7037-5 41504-2 369-9 366-5 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 1 4 1 4 1 4 .5 2 16 - 17 4 8
NVA NVA Norvancomycin 119 Glycopeptides Glycopeptide GLYCO 21a
NOV NOV NB Novobiocin CLSI,NEO X X 49 5ug Polypeptides Coumarin POLYPEP 26 X Novobiocin 18957-1 372-3 371-5 41706-3 373-1 370-7 15 - 16
NOV NO1 NB Novobiocin NEO X 373 100ug Polypeptides Coumarin POLYPEP 26 X Novobiocin 18957-1 372-3 371-5 41706-3 373-1 370-7 12 13-21 22
NYS NYS NY NYS NYS Nystatin NEO X 273 50ug Antifungals FUNG 29 Nystatin 18958-9 35824-2 10697-1 10698-9
OFX OFL OFX OFLX Ofloxacin CLSI,EUCAST X X X X 50 5ug Quinolones Fluoroquinolone FQ 11b X Ofloxacin 18959-7 376-4 375-6 7038-3 20384-4 23948-3 377-2 374-9 12 13-15 16 2 8 12 13-15 16 2 8 12 13-15 16 2 8 12 13-15 16 2 8 12 13-15 16 2 8 12 13-15 16 2 8 12 13-15 16 2 8 12 13-15 16 2 8 12 13-15 16 2 8 12 13-15 16 2 8 12 13-15 16 2 8 18 19-21 22 0.5 2 21 22-24 25 .5 1 17 18-21 22 1 4 1 8 .5 8 .5 2 2 4
OFX OF1 OFX OFLX Ofloxacin BSAC X 322 1ug Quinolones Fluoroquinolone FQ 11b X Ofloxacin 18959-7 376-4 375-6 7038-3 20384-4 23948-3 377-2 374-9 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 1 8 1 4 1 8 .5 8 .5 2 23 - 24 2 4
OFX OF0 OFX OFLX Ofloxacin AFA,SRGA,NEO X X X 202 10ug Quinolones Fluoroquinolone FQ 11b X Ofloxacin 18959-7 376-4 375-6 7038-3 20384-4 23948-3 377-2 374-9 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 12 13-23 24 1 8 1 4 1 8 17 18-27 28 .5 8 17 18-23 24 .5 2 2 4
OLE OLE OL OLE Oleandomycin 167 15ug Macrolides MACRO 17 Oleandomyc 18960-5 380-6 379-8 381-4 378-0
OMC OMC Omadacycline CLSI X 502 Tetracyclines Aminomethylcycline TETRA 24c X 73594-4 73639-7 73616-5
OPT OPT Optochin 168 5ug Optochins OPT 27
ORB ORB ORB Orbifloxacin CLSI X 469 10ug Quinolones Fluoroquinolone FQ 11b X Orbifloxac 35827-5 35825-9 35826-7 17 18-22 23 1 8 17 18-22 23 1 8 17 18-22 23 1 8 17 18-22 23 1 8 17 18-22 23 1 8 17 18-22 23 1 8 17 18-22 23 1 8 17 18-22 23 1 8 17 18-22 23 1 8 17 18-22 23 1 8 17 18-22 23 1 8
ORI ORI Oritavancin CLSI,EUCAST X X X 442 Glycopeptides Glycopeptide LIPOGLYC 21a X Oritavanci 41736-0 41707-1 41708-9 41709-7
ORS ORS Ormetroprim/Sulfamethoxazole CLSI X 274 1.25/23.75ug Folate pathway inhibitors FOLATE 12a X 73593-6 73638-9 73615-7
ORN ORN ORN ORN Ornidazole 169 4ug Nitroimidazoles IMIDAZ 19
OXA OXA OX OXA Oxacillin CLSI,EUCAST X X X X X X 51 1ug X Penicillins Penicillin (Stable) PEN-S 01e X Oxacillin 18961-3 384-8 383-0 7039-1 385-5 382-2 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 2 4 1 2 1 4 9 10-11 12 14 - 15 2 4
OXA OX5 OX OXA Oxacillin DIN,NEO X X X 203 5ug X Penicillins Penicillin (Stable) PEN-S 01e X Oxacillin 18961-3 384-8 383-0 7039-1 385-5 382-2 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 15 - 16 19 - 20 2 4 15 - 16 1 2 1 4 2 4
OXA OX1 OX OXA Oxacillin AFA X 398 10ug X Penicillins Penicillin (Stable) PEN-S 01e X Oxacillin 18961-3 384-8 383-0 7039-1 385-5 382-2 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 .25 .5 2 4 1 2 19 - 20 1 4 2 4
OXO OXO OA OXL Oxolinic acid CLSI X 470 2ug Quinolones Quinolone QUIN 11a X Oxolinate 55696-9 55697-7 55695-1 55698-5
OXO OXO OA OXL Oxolinic acid X 90 10ug Quinolones Quinolone QUIN 11a Oxolinate 55696-9 55697-7 55695-1 55698-5 16 17-19 20 2 8
OXY OXY OT OTE OTC Oxytetracycline CLSI X X 170 30ug Tetracyclines TETRA 24 Oxytetracy 18962-1 388-9 387-1 389-7 386-3 16 17-18 19 4 16
OXY OX8 OT OTE OTC Oxytetracycline NEO X 374 80ug Tetracyclines TETRA 24 Oxytetracy 18962-1 388-9 387-1 389-7 386-3 14 15-27 28 4 16
PAS PAS PAS P-Aminosalicylic acid 171 Antimycobacterials MYCO 28 Para amino 23629-9 14332-1 23611-7
PAN PAN PAN PAPM-BP Panipenem 172 X Penems Carbapenems CARB 07a
PAR PAR PM PAR Paromomycin 275 Oligosaccharides OLIGO 27
PAZ PAZ PZF PZFX Pazufloxacin 457 Quinolones Fluoroquinolone FQ 11b
PEF PEF PEF Pefloxacin X 52 5ug Quinolones Fluoroquinolone FQ 11b Pefloxacin 18963-9 35828-3 390-5 7040-9 15 16-21 22 1 8 1 8
PEF PE0 PEF Pefloxacin NEO X 375 10ug Quinolones Fluoroquinolone FQ 11b Pefloxacin 18963-9 35828-3 390-5 7040-9 1 8 1 8
PEN PEN P PEN PCG Penicillin G CLSI,DIN,SRGA X X X X X 53 10units X Penicillins Penicillin PEN 01a X Penicillin 18965-4 393-9 392-1 7041-7 394-7 391-3 28 - 29 .125 .25 28 - 29 .125 .25 28 29 .125 .25 28 29 .125 .25 28 29 .125 .25 28 29 .125 .25 28 29 .125 .25 28 29 .125 .25 28 29 .125 .25 28 29 .125 .25 28 29 .125 .25 7 8-28 29 .25 32 12 13-23 24 0.125 2 .25 8 10 11-22 23 1 32 30 31-33 34 .125 .25
PEN PE1 P PEN PCG Penicillin G EUCAST X X X 323 1unit X Penicillins Penicillin PEN 01a X Penicillin 18965-4 393-9 392-1 7041-7 394-7 391-3 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .25 32 0.125 2 .25 8 1 32 24 - 25 .125 .25
PEN PE5 P PEN PCG Penicillin G NEO X 376 5ug X Penicillins Penicillin PEN 01a X Penicillin 18965-4 393-9 392-1 7041-7 394-7 391-3 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 .125 .25 14 15-27 28 .25 32 0.125 2 .25 8 1 32 .125 .25
PNV PNV PV PEN Penicillin V CLSI,EUCAST X X X X X 81 10ug X Penicillins Penicillin PEN 01a X Penicillin 18966-2 397-0 396-2 7042-5 398-8 395-4 0.125 2 20 21-25 26 1 4 30 31-33 34
PNO PNO Penicillin/Novobiocin CLSI X 84 10units/30ug Combinations Penicillin/Polypeptide OTHER 28 X Penicillin 35874-7 35872-1 35873-9 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4 14 15-17 18 1 4
PSU PSU PCG-SBT Penicillin/Sulbactam DIN X 437 10/10 X Beta-lactam+Inhibitors BL+INH 03 20 21-25 26 0.125 2
PIM PIM PIM Pentisomicin 276 Aminoglycosides AG 09
PTZ PTZ PTZ Pentizidone 277 Oxazolidinones OXAZOLID 20
PHE PHE PEPC Phenethicillin 458 X Penicillins Penicillin PEN 01a Phenethici 18967-0 401-0 400-2 402-8 399-6
PMR PMR PMR Pimaricin (Natamycin) 459 Antifungals FUNG 29
PPA PPA PI PIM PPA Pipemidic acid DIN X X 54 20ug Quinolones Quinolone QUIN 11a Pipemidate 18968-8 405-1 404-4 406-9 403-6 13 14-18 19 8 32 16 - 17 4 8 8 16
PPA PP3 PI PIM PPA Pipemidic acid NEO X 377 30ug Quinolones Quinolone QUIN 11a Pipemidate 18968-8 405-1 404-4 406-9 403-6 8 32 4 8 8 16
PIP PI7 PIP PIP PIPC Piperacillin BSAC X X 207 75ug X Penicillins Ureidopenicillin PEN 01c X Piperacill 18969-6 409-3 408-5 7043-3 410-1 407-7 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 11 12-19 20 8 128 4 64 16 128 16 32 23 - 24 16 32
PIP PIP PIP PIP PIPC Piperacillin CLSI X 55 100ug X Penicillins Ureidopenicillin PEN 01c X Piperacill 18969-6 409-3 408-5 7043-3 410-1 407-7 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 9 10-27 28 8 128 4 64 16 128 16 32 16 32
PIP PI3 PIP PIP PIPC Piperacillin EUCAST X X X X 206 30ug X Penicillins Ureidopenicillin PEN 01c X Piperacill 18969-6 409-3 408-5 7043-3 410-1 407-7 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 14 15-17 18 8 32 8 128 12 13-21 22 4 64 16 128 17 18-20 21 16 32 16 32
PIS PIS PIS PIPC-SBT Piperacillin/Sulbactam DIN X 278 30/15ug X Beta-lactam+Inhibitors BL+INH 03 13 14-21 22 4 64
TZP PTA PIT PIPC-TAZ Piperacillin/Tazobactam CLSI X 92 100/10ug X Beta-lactam+Inhibitors BL+INH 03 X Piperacill 18970-4 413-5 412-7 7044-1 414-3 411-9 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 17 18-20 21 16 128 16 128 17 18-20 21 16 128 17 18-20 21 16 128 9 10-27 28 8 128 4 64 16 64 8 32 16 32 16 32
TZP PT3 PIT PIPC-TAZ Piperacillin/Tazobactam EUCAST X X X 204 30/6ug X Beta-lactam+Inhibitors BL+INH 03 X Piperacill 18970-4 413-5 412-7 7044-1 414-3 411-9 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 14 15-17 18 8 32 8 128 4 64 16 64 8 32 17 18-20 21 16 32 16 32
TZP PT7 PIT PIPC-TAZ Piperacillin/Tazobactam BSAC X X 205 75/10ug X Beta-lactam+Inhibitors BL+INH 03 X Piperacill 18970-4 413-5 412-7 7044-1 414-3 411-9 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 13 14-20 21 8 128 4 64 16 64 8 32 16 32 23 - 24 16 32
TZP PT1 PIT PIPC-TAZ Piperacillin/Tazobactam DIN X 279 30/10ug X Beta-lactam+Inhibitors BL+INH 03 X Piperacill 18970-4 413-5 412-7 7044-1 414-3 411-9 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 16 128 8 128 14 15-21 22 4 64 16 64 8 32 16 32 16 32
PRC PRC PRC Piridicillin 280 X Penicillins ? PEN 01h
PRL PIL Pirlimycin CLSI X 173 2ug Lincosamides LINCO 15 X Pirlimycin 35831-7 35829-1 35830-9 12 - 13 2 4 12 - 13 2 4 12 13 2 4 12 13 2 4 12 13 2 4 12 13 2 4 12 13 2 4 12 13 2 4 12 13 2 4 12 13 2 4 12 13 2 4
PIR PIA PIR PA Piromidic acid X 281 25ug Quinolones Quinolone QUIN 11a 15 16-19 20 16 64
PME PME PMPC Pivmecillinam (Amdinocillin pivoxil) 460 X Penicillins Amidinopenicillin PEN 01f
PLZ PLZ Plazomicin CLSI X 503 Aminoglycosides AG 09 X 73592-8 73637-1 73614-0
POL POL PB POL PL-B Polymixin B CLSI X 471 300units Lipopeptides Polymyxin LIPOPEP 16 X Polymyxin 18972-0 421-8 420-0 35832-5 422-6 419-2 11 - 12 2 8 11 - 12 2 8 11 12 2 8 11 12 2 8 11 12 2 8 11 12 2 8 11 12 2 8 11 12 2 8 11 12 2 8 11 12 2 8 11 12 2 8
POL POL PB POL PL-B Polymixin B 56 50ug Lipopeptides Polymyxin LIPOPEP 16 X Polymyxin 18972-0 421-8 420-0 35832-5 422-6 419-2 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8
POS POS Posaconazole CLSI,NEO X X 478 5ug Antifungals FUNG 29
PRX PRX PRE Premafloxacin CLSI X 403 1ug Quinolones Fluoroquinolone FQ 11b X 73591-0 73636-3 73613-2
PRM PRM PRM Primycin 282 Macrolides MACRO 17
PRI PR3 PT PRI Pristinamycin NEO X 378 30ug Streptogramins STREPTOG 23 Pristinamy 32383-2 35833-3 35834-1 1 4
PRI PRI PT Pristinamycin X 93 15ug Streptogramins STREPTOG 23 Pristinamy 32383-2 35833-3 35834-1 18 19-21 22 1 4
PRP PRP PR PRO Propicillin DIN X 174 X Penicillins Aminopenicillin PEN 01b 0.125 0.25
PKA PKA PKA Propikacin 283 Aminoglycosides AG 09
PTH PRT PTH PTH Prothionamide 175 Antimycobacterials MYCO 28
PRU PRU PUFX Prulifloxacin 461 Quinolones Fluoroquinolone FQ 11b
PZA PZA PZA PZA Pyrazinamide 135 Antimycobacterials MYCO 28 Pyrazinami 18973-8 425-9 424-2 20461-0 23632-3 426-7 423-4
QDA QUI QPD QPR/DPR Quinupristin/Dalfopristin CLSI,EUCAST X X X X 176 15ug Streptogramins STREPTOG 23 X Quinuprist 23640-6 35835-8 23641-4 33334-4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 15 16-18 19 1 4 18 19-24 25 .5 4 19 - 20 2 4
RAC RAC Ractopamine 422 Phenethylamines PHEN 27 X
RAM RAM Ramoplanin CLSI X 493 Glycopeptides Lipoglycopeptide LIPOGLYC 21a X Ramoplanin 41737-8 41712-1 41710-5 41711-3
RZM RZM Razupenem CLSI X 489 10ug X Penems Carbapenems CARB 07a X 73590-2 73635-5 73612-4
RST RST RSM Ribostamycin 462 Aminoglycosides AG 09
RIB RIB RIB Rifabutin 136 Ansamycins RIF 10 Rifabutin 19149-4 16100-0 20386-9 23630-7
RIF RI3 RA RAM RFP Rifampin NEO X X 58 30ug Ansamycins RIF 10 X Rifampin 18974-6 429-1 428-3 7045-8 20385-1 23949-1 430-9 427-5 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 14 15-27 28 13 14-18 19 4 32 1 2 1 2 1 2 .125 .06
RIF RIF RA RAM RFP Rifampin CLSI,EUCAST X X X X X 57 5ug Ansamycins RIF 10 X Rifampin 18974-6 429-1 428-3 7045-8 20385-1 23949-1 430-9 427-5 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 16 17-19 20 1 4 4 32 1 2 25 26 27 1 2 21 22-24 25 1 2 .125 .06
RIF RI2 RA RAM RFP Rifampin BSAC X 324 2ug Ansamycins RIF 10 X Rifampin 18974-6 429-1 428-3 7045-8 20385-1 23949-1 430-9 427-5 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 4 32 1 2 1 2 1 2 29 - 30 .125 .06
Rifaximin CLSI X 494 Ansamycins RIF 73589-4 73634-8 73611-6
RIT RIT RIPM Ritipenem 463 X Penems Carbapenems CARB 07a
RIA RIA RIPM-AC Ritipenem acoxil 464 X Penems Carbapenems CARB 07a
ROK ROK ROK ROK RKM Rokitamycin 284 Macrolides MACRO 17
ROS ROS ROS ROS Rosoxacin X 94 5ug Quinolones Quinolone QUIN 11a Rosoxacin 18977-9 441-6 440-8 442-4 439-0 1 2
RXT RO3 RXT ROX RXM Roxithromicin NEO X 379 30ug Macrolides MACRO 17 Roxithromy 18978-7 445-7 444-0 7046-6 446-5 443-2 12 13-17 18 1 2 1 2
RXT ROX RXT ROX RXM Roxithromicin SRGA X 77 15ug Macrolides MACRO 17 Roxithromy 18978-7 445-7 444-0 7046-6 446-5 443-2 1 2 19 20-24 25 1 2
SAL SAL Salinomycin 423 Combinations Coccidiostat/Ionophore OTHER 28 Salinomyci 35838-2 35836-6 35837-4
SAR SAR SAR Sarafloxacin CLSI X 285 5ug Quinolones Fluoroquinolone FQ 11b X 73588-6 73633-0 73610-8
SRX SRX SRX Sarmoxicillin 286 X Penicillins Aminopenicillin PEN 01b
SIS SIS SIS SIS SISO Sisomicin X 78 10ug Aminoglycosides AG 09 Sisomicin 18979-5 449-9 448-1 450-7 447-3 13 14-15 16 4 16
SIT SIT SIT STFX Sitafloxacin 465 Quinolones Fluoroquinolone FQ 11b
SOL SOL Solithromycin CLSI X 504 Macrolides Fluoroketolide MACRO 17c X 73587-8 73632-2 73609-0
SPX SP2 SPF SPFX Sparfloxacin BSAC 325 2ug Quinolones Fluoroquinolone FQ 11b X Sparfloxac 23628-1 35839-0 20397-6 7047-4 23610-9 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 1 4 1 4
SPX SPA SPF SPFX Sparfloxacin CLSI,DIN X X X 110 5ug Quinolones Fluoroquinolone FQ 11b X Sparfloxac 23628-1 35839-0 20397-6 7047-4 23610-9 15 16-18 19 .5 2 15 16-18 19 .5 2 15 16-18 19 .5 2 15 16-18 19 .5 2 15 16-18 19 .5 2 15 16-18 19 .5 2 15 16-18 19 .5 2 15 16-18 19 .5 2 15 16-18 19 .5 2 15 16-18 19 .5 2 15 16-18 19 .5 2 15 16-19 20 1 4 18 19-22 23 1 4
SPX SP1 SPF SPFX Sparfloxacin NEO X 380 10ug Quinolones Fluoroquinolone FQ 11b Sparfloxac 23628-1 35839-0 20397-6 7047-4 23610-9 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 .5 2 1 4 1 4
SPT SP0 SPT SPT SPCM Spectinomycin NEO X 381 200ug Aminocyclitols AMINOC 08 X Spectinomy 18980-3 453-1 452-3 35840-8 454-9 451-5 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 64 128 8 16 64 128
SPT SPE SPT SPT SPCM Spectinomycin CLSI,EUCAST X X X 59 100ug Aminocyclitols AMINOC 08 X Spectinomy 18980-3 453-1 452-3 35840-8 454-9 451-5 14 15-17 18 32 128 14 15-17 18 32 128 19 - 20 64 128 8 16 64 128
SPT SP5 SPT SPCM Spectinomycin X 424 25ug Aminocyclitols AMINOC 08 X Spectinomy 18980-3 453-1 452-3 35840-8 454-9 451-5 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 32 128 64 128 8 16 13 - 14 64 128
SPI SPI SP SPM SPM Spiramycin X 95 100ug Macrolides MACRO 17 Spiramycin 18981-1 457-2 456-4 458-0 455-6 18 19-23 24 1 8
SPI SM2 SP SPM SPM Spiramycin NEO X 382 200ug Macrolides 16-Membered ring MACRO 17 Spiramycin 18981-1 457-2 456-4 458-0 455-6 1 8
STR STR S STR SM Streptomycin CLSI,BSAC X X X 60 10ug Aminoglycosides AG 09 X Streptomyc 18982-9 461-4 460-6 7048-2 20462-8 23626-5 462-2 459-8 11 12-14 15 11 12-14 15 11 12-14 15 11 12-14 15 11 12-14 15 11 12-14 15 11 12-14 15 11 12-14 15 11 12-14 15 11 12-14 15 11 12-14 15 12 13-14 15 8 32 4 32 12 - 13 8 16
STR ST1 S STR SM Streptomycin NEO X 383 100ug Aminoglycosides AG 09 X Streptomyc 18982-9 461-4 460-6 7048-2 20462-8 23626-5 462-2 459-8 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 14 15-27 28 8 32 4 32 8 16
STH STH Streptomycin-High CLSI X 139 300ug Aminoglycosides AG 09 X Streptomyc 18983-7 7049-0 6933-6 35841-6 6 7-9 10 1024 1025 6 7-9 10 1024 1025 6 7-9 10 1024 1025 6 7-9 10 1024 1025 6 7-9 10 1024 1025 6 7-9 10 1024 1025 6 7-9 10 1024 1025 6 7-9 10 1024 1025 6 7-9 10 1024 1025 6 7-9 10 1024 1025 6 7-9 10 1024 1025 250 501 500 1000
STH ST5 Streptomycin-High NEO X X 208 500ug Aminoglycosides AG 09 X Streptomyc 18983-7 7049-0 6933-6 35841-6 1000 1001 1000 1001 1000 1001 1000 1001 1000 1001 1000 1001 1000 1001 1000 1001 1000 1001 1000 1001 1000 1001 11 12-13 14 250 501 500 1000
SUL SBM SUL SBT Sulbactam CLSI X X 397 X Beta-lactamase inhibitors BL-INH 02 Sulbactam 41739-4 41716-2 41718-8 41717-0 8
SBC SLB SBC SBPC Sulbenicillin 125 X Penicillins Sulfonopenicillin PEN 01g
SUC SUC SUC Sulconazole 287 Antifungals FUNG 29
SUP SUP Sulfachlorpyridazine 288 Folate pathway inhibitors FOLATE 12a
SDI SDI SLD Sulfadiazine 425 Folate pathway inhibitors FOLATE 12a Sulfadiazi 18984-5 465-5 464-8 7050-8 466-3 463-0
SUD SUD X Sulfadimethoxine 289 Folate pathway inhibitors FOLATE 12a
SDM SDM SDM Sulfadimidine AFA X 290 250ug Folate pathway inhibitors FOLATE 12a 12 13-25 26 16 256
SZO SZO SZO Sulfamazone 291 Folate pathway inhibitors FOLATE 12a
SUM SUM Sulfamethazine 292 Folate pathway inhibitors FOLATE 12a
SMX SMX SMX SOZ Sulfamethoxazole CLSI X X 427 200-300ug Folate pathway inhibitors FOLATE 12a X Sulfametho 18985-2 469-7 468-9 11577-4 470-5 467-1 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 14 15-27 28 11 12-16 17 64 512 32 128 32 64
SMX SMX SMX SOZ Sulfamethoxazole X 293 100ug Folate pathway inhibitors FOLATE 12a X Sulfametho 18985-2 469-7 468-9 11577-4 470-5 467-1 256 512 256 512 256 512 256 512 256 512 256 512 256 512 256 512 256 512 256 512 256 512 64 512 32 128 13 - 14 32 64
SNA SNA SNA Sulfasuccinamide 294 Folate pathway inhibitors FOLATE 12a
SUT SUT ST Sulfathiazole 295 Folate pathway inhibitors FOLATE 12a
SOX SOX Sulfisoxazole CLSI X 404 200-300ug Folate pathway inhibitors FOLATE 12a X Sulfisoxaz 18986-0 473-9 472-1 11578-2 474-7 471-3 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 64 512
SSS SUL SSS SSS Sulfonamides CLSI X X 61 200-300ug Folate pathway inhibitors FOLATE 12a X Sulfonamid 18987-8 477-0 476-2 35842-4 478-8 475-4 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 12 13-16 17 256 512 14 15-27 28 11 12-16 17 64 512 32 128 32 64
SLP SLP Sulopenem CLSI X 484 2ug X Penems Penem PENEM 07b X Sulopenem 55289-3 55291-9 55290-1
TAL TAL TAPC Talampicillin 466 X Penicillins Aminopenicillin PEN 01b Talampicil 18988-6 481-2 480-4 482-0 479-6
TLP TLP TLP Talmetoprim 296 Folate pathway inhibitors FOLATE 12a
TAZ TAZ TAB TAZ Tazobactam CLSI X 297 X Beta-lactamase inhibitors BL-INH 02 Tazobactam 41740-2 41719-6 41721-2 41720-4
TZD TED Tedizolid CLSI,EUCAST X X X 505 Oxazolidinones OXAZOLID 20 73586-0 73631-4 73608-2
TEC TE6 TEC TPL TEIC Teicoplanin NEO X 384 60ug Glycopeptides Lipoglycopeptide GLYCO 21b X Teicoplani 18989-4 485-3 484-6 7051-6 486-1 483-8 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 8 32 12 13-21 22 4 32 2 8 4 16 4 8 4 8
TEC TEI TEC TPL TEIC Teicoplanin CLSI,EUCAST X X X X X 79 30ug Glycopeptides Lipoglycopeptide GLYCO 21b X Teicoplani 18989-4 485-3 484-6 7051-6 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 17 4 16 2 8 14 15 16 4 16 11 12-15 16 4 8 14 - 15 4 8
TCM TCM TEIC Teicoplanin-Macromethod 440 Glycopeptides Lipoglycopeptide GLYCO 21b
TLV TLV Telavancin CLSI X 472 30ug Glycopeptides Lipoglycopeptide GLYCO 21b X 72894-9 73630-6 72894-9
TLT TLT TEL TEL Telithromycin CLSI,EUCAST X X X 396 15ug Macrolides Ketolide MACRO 17b X Telithromy 35845-7 35843-2 35844-0 41722-0 18 19-21 22 1 4 18 19-21 22 1 4 18 19-21 22 1 4 18 19-21 22 1 4 18 19-21 22 1 4 18 19-21 22 1 4 18 19-21 22 1 4 18 19-21 22 1 4 18 19-21 22 1 4 18 19-21 22 1 4 18 19-21 22 1 4 16 17-20 21 .5 4
TMX TEM TMX TEM Temafloxacin CLSI X 111 5ug Quinolones Fluoroquinolone FQ 11b X Temafloxac 18990-2 489-5 488-7 490-3 487-9
TEM TEL TEM TMO Temocillin NEO X 298 30ug X Penicillins Penicillin (Stable) PEN-S 01e Temocillin 18991-0 493-7 492-9 494-5 491-1
TRB TRB Terbinafine NEO X 479 30ug Antifungals FUNG 29
TRC TRC Terconazole 480 Antifungals FUNG 29
TCY TET TE TET TC Tetracycline CLSI,EUCAST X X X X X X X 62 30ug Tetracyclines TETRA 24a X Tetracycli 18993-6 497-8 496-0 7052-4 498-6 495-2 11 12-14 15 4 16 11 12-14 15 4 16 11 12-14 15 4 16 11 12-14 15 4 16 11 12-14 15 4 16 11 12-14 15 4 16 11 12-14 15 4 16 11 12-14 15 4 16 11 12-14 15 4 16 11 12-14 15 4 16 11 12-14 15 4 16 16 17-18 19 4 16 16 17-21 22 1 8 1 8 19 20-24 25 1 4 21 22-24 25 2 4 33 - 34 1 2
TCY TE8 TE TET TC Tetracycline NEO X 399 80ug Tetracyclines TETRA 24 X Tetracycli 18993-6 497-8 496-0 7052-4 498-6 495-2 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 14 15-27 28 4 16 1 8 1 8 1 4 2 4 1 2
TCY TE1 TE TET TC Tetracycline BSAC,NEO X X 326 10ug Tetracyclines TETRA 24 X Tetracycli 18993-6 497-8 496-0 7052-4 498-6 495-2 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 1 8 1 8 1 4 2 4 1 2
TET TEP TET TTP Tetroxoprim 299 Folate pathway inhibitors FOLATE 12a
THA THA Thiacetazone 177 Antimycobacterials MYCO 28 Thiacetazo 32384-0
THI THI TP TPH TP Thiamphenicol 120 30ug Phenicols PHEN 22 Thiampheni 41723-8 41725-3 41724-6
THI TH6 TP TPH TP Thiamphenicol NEO X 385 60ug Phenicols PHEN 22 Thiampheni 41723-8 41725-3 41724-6
TIA TIA TIA Tiamulin CLSI,NEO X X 178 30ug Pleuromutilins OTHER 28 X Tiamulin 35848-1 35846-5 35847-3 8 - 9 16 32 8 - 9 16 32 8 9 16 32 8 9 16 32 8 9 16 32 8 9 16 32 8 9 16 32 8 9 16 32 8 9 16 32 8 9 16 32 8 9 16 32
TIC TIC TIC TIC Ticarcillin CLSI,EUCAST X X X 63 75ug X Penicillins Carboxypenicillin PEN 01d X Ticarcilli 18994-4 501-7 500-9 7053-2 502-5 499-4 14 15-19 20 16 128 14 15-19 20 16 128 21 22 23 8 32 9 10-27 28 17 18-21 22 16 128 16 128
TCC TIM TCC TCC Ticarcillin/Clavulanic acid CLSI,EUCAST X X X X X 64 75/10-15ug X Beta-lactam+Inhibitors BL+INH 03 X Ticarcilli 18995-1 505-8 504-1 7054-0 506-6 503-3 14 15-19 20 16 128 14 15-19 20 16 128 14 15-19 20 16 128 14 15-19 20 16 128 14 15-19 20 16 128 14 15-19 20 16 128 14 15-19 20 16 128 14 15-19 20 16 128 14 15-19 20 16 128 14 15-19 20 16 128 14 15-19 20 16 128 8 32 9 10-27 28 17 18-21 22 16 128 15 16-19 20 16 128 20 - 21 16 32
TGC TGC TGC Tigecycline CLSI,EUCAST X X X 473 15ug Tetracyclines Glycylglycine TETRA 24b X Tigecyclin 42357-4 42356-6 42355-8 42354-1 14 15-17 18 1 4 21 - 22 .25 1
TBQ TBQ TBQ Tilbroquinol 300 Quinolones Quinolone QUIN 11a
TIL TIL Tilmicosin CLSI X 179 15ug Macrolides 16-Membered ring MACRO 17a X Tilmicosin 35851-5 35849-9 35850-7 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32 10 11-13 14 8 32
TIN TIN TNZ Tinidazole CLSI X 180 4ug Nitroimidazoles IMIDAZ 29 Tinidazole 54928-7 55721-5 55720-7 55722-3
TIN TI1 TNZ Tinidazole CLSI,NEO X 386 16ug Nitroimidazoles IMIDAZ 29 Tinidazole 54928-7 55721-5 55720-7 55722-3
TDC TDC TDC Tiodonium chloride 301 Thiophenes THIO 27
TXC TXC TXC Tioxacin 302 Quinolones Quinolone QUIN 11a
TIZ TIZ Tizoxanide CLSI X 495 Thiazolides THIAZ 30 73585-2 73629-8 73607-4
TOB TO3 TM TOB TOB Tobramycin AFA,SRGA X X 209 30ug Aminoglycosides AG 09 X Tobramycin 18996-9 509-0 508-2 7055-7 25800-4 510-8 507-4 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 1 8 1 8 18 19-22 23 2 8 17 18-20 21 2 4 1 2
TOB TO4 TM TOB TOB Tobramycin NEO X 387 40ug Aminoglycosides AG 09 X Tobramycin 18996-9 509-0 508-2 7055-7 25800-4 510-8 507-4 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 4 16 14 15-25 26 4 16 1 8 1 8 2 8 2 4 1 2
TOB TOB TM TOB TOB Tobramycin CLSI,EUCAST X X X X X 65 10ug Aminoglycosides AG 09 X Tobramycin 18996-9 509-0 508-2 7055-7 25800-4 510-8 507-4 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 12 13-14 15 4 16 11 12-14 15 2 8 14 15-16 17 8 32 15 16-18 19 1 8 1 8 2 8 2 4 17 - 18 1 2
TFX TFX TFX TOS TFLX Tosufloxacin 303 Quinolones Fluoroquinolone FQ 11b
TMP TM2 TRP Trimethoprim X 426 2.5ug Folate pathway inhibitors FOLATE 12a X Trimethopr 18997-7 513-2 512-4 7056-5 23614-1 514-0 511-6 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 4 16 1 4 2 8 2 8 14 15-19 20 .5 4
TMP TMP TMP TRP Trimethoprim CLSI,EUCAST X X X X X X 66 5ug Folate pathway inhibitors FOLATE 12a X Trimethopr 18997-7 513-2 512-4 7056-5 23614-1 514-0 511-6 10 11-15 16 8 16 10 11-15 16 8 16 10 11-15 16 8 16 10 11-15 16 8 16 10 11-15 16 8 16 10 11-15 16 8 16 10 11-15 16 8 16 10 11-15 16 8 16 10 11-15 16 8 16 10 11-15 16 8 16 10 11-15 16 8 16 14 15-17 18 2 8 11 12-15 16 4 16 1 4 16 17-20 21 2 8 13 14-16 17 2 8 .5 4
TMP TM5 TMP TRP Trimethoprim NEO X 388 5.2ug Folate pathway inhibitors FOLATE 12a X Trimethopr 18997-7 513-2 512-4 7056-5 23614-1 514-0 511-6 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 8 16 12 13-21 22 4 16 1 4 2 8 2 8 .5 4
SXT SXT SXT SXT ST Trimethoprim/Sulfamethoxazole CLSI,EUCAST X X X X X X X 67 1.25/23.75ug Folate pathway inhibitors FOLATE 12a X Trimethopr 18998-5 517-3 516-5 7057-3 20387-7 23631-5 518-1 515-7 10 11-15 16 2 4 10 11-15 16 2 4 10 11-15 16 2 4 10 11-15 16 2 4 10 11-15 16 2 4 10 11-15 16 2 4 10 11-15 16 2 4 10 11-15 16 2 4 10 11-15 16 2 4 10 11-15 16 2 4 10 11-15 16 2 4 12 13-15 16 2 8 9 10-15 16 2 16 10 11-15 16 16 128 1 4 13 14-25 26 2 8 13 14-16 17 16 64 15 - 16 32 64
SXT SX5 SXT SXT ST Trimethoprim/Sulfamethoxazole NEO X 389 5.2/240ug Folate pathway inhibitors FOLATE 12a X Trimethopr 18998-5 517-3 516-5 7057-3 20387-7 23631-5 518-1 515-7 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 14 15-27 28 2 16 16 128 1 4 2 8 16 64 32 64
TRL TRL Troleandomycin 181 Macrolides MACRO 17 Troleandom 18999-3 521-5 520-7 522-3 519-9
TRO TRO TRS Trospectomycin CLSI X 112 30ug Aminocyclitols AMINOC 08 X Trospectin 35854-9 35852-3 35853-1
TVA TRV TRO Trovafloxacin CLSI X X 182 10ug Quinolones Fluoroquinolone FQ 11b X Trovafloxa 23642-2 35855-6 23643-0 7058-1 16 17-19 20 1 4 1 4 .25 2
TVA TRV TRO Trovafloxacin DIN X 438 5ug Quinolones Fluoroquinolone FQ 11b X Trovafloxa 23642-2 35855-6 23643-0 7058-1 16 17-19 20 1 4
TYL TYL TI TLS Tylosin NEO X 304 150ug Macrolides 16-Membered ring MACRO 17 X Tylosin 35858-0 35856-4 35857-2
PRU PRU Ulifloxacin (Prulifloxacin) 490 5ug Quinolones Fluoroquinolone FQ 11b
VAN VA7 VA VAN VCM Vancomycin NEO X 390 70ug Glycopeptides Glycopeptide GLYCO 21a X Vancomycin 19000-9 525-6 524-9 7059-9 23615-8 526-4 523-1 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 12 13-21 22 4 32 4 16 4 16 4 16 4 8 4 8
VAN VAN VA VAN VCM Vancomycin CLSI,AFA X X X 68 30ug Glycopeptides Glycopeptide GLYCO 21a X Vancomycin 19000-9 525-6 524-9 7059-9 23615-8 526-4 523-1 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 17 4 16 4 16 4 16 16 17-19 20 4 16 4 8 4 8
VAN VA5 VA VAN VCM Vancomycin EUCAST,NEO X X X X X 305 5ug Glycopeptides Glycopeptide GLYCO 21a X Vancomycin 19000-9 525-6 524-9 7059-9 23615-8 526-4 523-1 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 4 32 15 - 16 4 32 4 16 4 16 4 16 9 10-10 11 4 8 11 - 12 4 8
VAM VAM VCM Vancomycin-Macromethod 436 Glycopeptides Glycopeptide GLYCO 21a
VIO VIO VIO Viomycin 183 Antimycobacterials MYCO 28 Viomycin 19001-7 529-8 528-0 23616-6 530-6 527-2
VIR VI3 VG VIR Virginiamycine NEO X 391 30ug Streptogramins STREPTOG 23 Virginiamy 35861-4 35859-8 35860-6
VIR VIR VG VIR Virginiamycine X 184 15ug Streptogramins STREPTOG 23 Virginiamy 35861-4 35859-8 35860-6
VOR VOR VRCZ Voriconazole CLSI,NEO X X 431 1ug Antifungals FUNG 29 X Voriconazo 32379-0 41200-7 35863-0 35862-2 41199-1
AZA AZA Aztreonam/Avibactam CLSI X 510 30/20ug Beta-lactam+inhibitors BL+INH
POP POP Polymyxin B/Polysorbate 80 CLSI X 509 300units Lipopeptides Polymyxin LIPOPEP 16 X
SUR SUR Surotomycin CLSI X 514 Lipopeptides LIPOPEP
COP COP Colistin/Polysorbate CLSI X 508 10ug Lipopeptides LIPOPEP 16 X
ERV ERV Eravacycline CLSI X 513 20ug Fluorocyclines OTHER 28
DLM DLM Delamanid X X 512
BDQ BDQ Bedaquiline X X 511
FOV FOV Cefovecin CLSI X 515 Cephems Cephalosporin III CEPH3 04c X
GAM GAM Gamithromycin CLSI X 516 Macrolides 15-Membered ring MACRO X
KAC KAC Kanamycin/Cephalexin CLSI X 517 Combinations Aminoglycoside/Cephem OTHER 28 X
TIP TIP Tildipirosin CLSI X 519 60ug Macrolides 16-Membered ring MACRO X
PRA PRA Pradofloxacin CLSI X 518 Quinolones Fluoroquinolone FQ 11b X
TUL TUL Tulathromycin CLSI X 520 30ug Macrolides 15-Membered ring MACRO X 14 15-17 18 16 64 14 15-17 18 16 64 14 15-17 18 16 64 14 15-17 18 16 64 14 15-17 18 16 64 14 15-17 18 16 64
Tylvalosin CLSI X 521 Macrolides 16-Membered ring MACRO X
AKF AKF Amikacin/Fosfomycin CLSI X 522 Combinations Aminoglycoside/Fosfomycin OTHER 28
CDZ CDZ Cadazolid CLSI X 523 Quinolonyl oxazolidinones OTHER 28
FPT FPT Cefepime/Tazobactam CLSI X 524 Beta-lactam+Inhibitors BL+INH 03c
DFX DFX Delafloxacin CLSI X 525 5ug Quinolones Quinolone QUIN 11a
GEP GEP Gepotidacin CLSI X 526 10ug Triazaacenaphylenes OTHER 28
IMR IMR Imipenem/relebactam CLSI X 527 Beta-lactam+Inhibitors BL+INH 03c
LMU LMU Lefamulin CLSI X 528 20ug Pleuromutilins OTHER 28
LND LND Levonadifloxacin CLSI X 529 10ug Quinolones Benzoquinolizine BQ 11c
SEC SEC Secnidazole CLSI X 530 Nitroimidazoles IMIDAZ
ISV ISV Isavuconazole EUCAST X X 531 Antifungals FUNG
MUP MU2 MUP MUP Mupirocin EUCAST X X 532 200ug Pseudomonic acids PSEUDOM 27 X Mupirocin 20389-3 35822-6 35823-4 7033-4
MEV MEV Meropenem/Vaborbactam CLSI X 533 20/10ug Beta-lactam+Inhibitors 03c X 14 15-17 18 4 16 14 15-17 18 4 16
ZWK ZWK Nafithromycin CLSI X 534 15ug Macrolides Ketolide MACRO 17 X
PEX PEX Pexiganan CLSI X 535 Peptsides Magainin PEPTIDE X
Retapamulin CLSI X 538 Pleuromutilins
Rifapentine CLSI X 539 Ansamycins
FDC FDC Cefiderocol CLSI X 537 Cephems Siderophore 4 16 4 16
FPZ FPZ Cefepime/Zidebactam CLSI X 536
ZID ZID Zidebactam CLSI 540 X
RID RID Ridinilazole CLSI 541 X
TBP TBP Tebipenem CLSI X 10ug Penems Carbapenems X
MNC MNC Meropenem/Nacubactam CLSI X Beta-lactam+Inhibitors
NAC NAC Nacubactam CLSI X Beta-lactamase inhibitors
TYL TYL Tylosin CLSI,EUCAST X X 304 30ug Macrolides 16-Membered ring 17
ITR ITR Itraconazole NEO X X 133 10ug Antifungals FUNG 29 X
CZA CZA Ceftazidime/Avibactam EUCAST 498 10/4ug Beta-lactam+Inhibitors 03 X 20 21 8 16 20 21 8 16
BPR BPR Ceftobiprole EUCAST 474 5ug Cephems Cephalosporin 04e X
AMX AMX Amoxicillin X 82 20ug Penicillins Aminopenicillin 01b X
ZFD Zoliflodacin CLSI X 544 Spiropyrimidinetrione X
OZN Ozenoxacin CLSI X 543 Quinolones Fluoroquinolone FQ X
EXE Exebacase CLSI X 542 Antistaphylococcal lysin X
LIN LIN L LIN LCM Lincomycin CLSI X 38 4ug Lincosamides LINCO 15 Lincomycin 18938-1 300-4 299-8 41700-6 301-2 298-0 16 17-20 21 2 16 17 18-23 24 1 4

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -24,14 +24,22 @@
# ==================================================================== #
# some old R instances have trouble installing tinytest, so we ship it too
install.packages("data-raw/tinytest_1.2.4.10.tar.gz", dependencies = c("Depends", "Imports"))
install.packages("data-raw/tinytest_1.3.1.tar.gz", dependencies = c("Depends", "Imports", "LinkingTo"))
install.packages("data-raw/AMR_latest.tar.gz", dependencies = FALSE)
pkg_suggests <- gsub("[^a-zA-Z0-9]+", "",
unlist(strsplit(unlist(packageDescription("AMR",
fields = c("Suggests", "Enhances"))),
", ?")))
fields = c("Suggests", "Enhances", "LinkingTo"))),
split = ", ?")))
pkg_suggests <- unname(pkg_suggests[!is.na(pkg_suggests)])
cat("################################################\n")
cat("Packages listed in Suggests/Enhances:", paste(pkg_suggests, collapse = ", "), "\n")
cat("################################################\n")
if (.Platform$OS.type != "unix") {
# no compiling on Windows here
options(install.packages.compile.from.source = FALSE)
}
to_install <- pkg_suggests[!pkg_suggests %in% rownames(utils::installed.packages())]
if (length(to_install) == 0) {
@ -40,13 +48,23 @@ if (length(to_install) == 0) {
for (i in seq_len(length(to_install))) {
cat("Installing package", to_install[i], "\n")
tryCatch(install.packages(to_install[i],
type = ifelse(.Platform$OS.type == "unix", "source", "binary"),
type = "source",
repos = "https://cran.rstudio.com/",
dependencies = c("Depends", "Imports"),
dependencies = c("Depends", "Imports", "LinkingTo"),
quiet = FALSE),
# message = function(m) invisible(),
warning = function(w) message(w$message),
error = function(e) message(e$message))
if (.Platform$OS.type != "unix" && !to_install[i] %in% rownames(utils::installed.packages())) {
tryCatch(install.packages(to_install[i],
type = "binary",
repos = "https://cran.rstudio.com/",
dependencies = c("Depends", "Imports", "LinkingTo"),
quiet = FALSE),
# message = function(m) invisible(),
warning = function(w) message(w$message),
error = function(e) message(e$message))
}
}
to_update <- as.data.frame(utils::old.packages(repos = "https://cran.rstudio.com/"), stringsAsFactors = FALSE)

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
@ -68,7 +68,16 @@ TRANSLATIONS <- utils::read.delim(file = "data-raw/translations.tsv",
quote = "")
# for checking input in `language` argument in e.g. mo_*() and ab_*() functions
LANGUAGES_SUPPORTED <- sort(c("en", colnames(TRANSLATIONS)[nchar(colnames(TRANSLATIONS)) == 2]))
LANGUAGES_SUPPORTED <- c(Danish = "da",
German = "de",
English = "en",
Spanish = "es",
French = "fr",
Italian = "it",
Dutch = "nl",
Portuguese = "pt",
Russian = "ru",
Swedish = "sv")
# EXAMPLE_ISOLATES <- readRDS("data-raw/example_isolates.rds")
@ -95,7 +104,9 @@ create_species_cons_cops <- function(type = c("CoNS", "CoPS")) {
"pulvereri", "rostri", "saccharolyticus", "saprophyticus",
"sciuri", "simulans", "stepanovicii", "succinus",
"ureilyticus",
"vitulinus", "vitulus", "warneri", "xylosus")
"vitulinus", "vitulus", "warneri", "xylosus",
"caledonicus", "canis",
"durrellii", "lloydii")
| (MO_staph$species == "schleiferi" & MO_staph$subspecies %in% c("schleiferi", ""))),
"mo", drop = TRUE]
} else if (type == "CoPS") {
@ -105,13 +116,15 @@ create_species_cons_cops <- function(type = c("CoNS", "CoPS")) {
"delphini", "lutrae",
"hyicus", "intermedius",
"pseudintermedius", "pseudointermedius",
"schweitzeri", "simiae")
"schweitzeri", "simiae",
"roterodami")
| (MO_staph$species == "schleiferi" & MO_staph$subspecies == "coagulans")),
"mo", drop = TRUE]
}
}
MO_CONS <- create_species_cons_cops("CoNS")
MO_COPS <- create_species_cons_cops("CoPS")
MO_STREP_ABCG <- as.mo(MO_lookup[which(MO_lookup$genus == "Streptococcus"), "mo", drop = TRUE], Lancefield = TRUE) %in% c("B_STRPT_GRPA", "B_STRPT_GRPB", "B_STRPT_GRPC", "B_STRPT_GRPG")
# antibiotic groups
# (these will also be used for eucast_rules() and understanding data-raw/eucast_rules.tsv)
@ -155,6 +168,7 @@ usethis::use_data(EUCAST_RULES_DF,
# EXAMPLE_ISOLATES,
MO_CONS,
MO_COPS,
MO_STREP_ABCG,
AB_AMINOGLYCOSIDES,
AB_AMINOPENICILLINS,
AB_ANTIFUNGALS,
@ -265,15 +279,19 @@ if (changed_md5(av)) {
try(openxlsx::write.xlsx(av, "data-raw/antivirals.xlsx"), silent = TRUE)
}
if (changed_md5(intrinsic_resistant)) {
# give official names to ABs and MOs
intrinsicR <- data.frame(microorganism = mo_name(intrinsic_resistant$mo),
antibiotic = ab_name(intrinsic_resistant$ab),
stringsAsFactors = FALSE)
if (changed_md5(intrinsicR)) {
usethis::ui_info(paste0("Saving {usethis::ui_value('intrinsic_resistant')} to {usethis::ui_value('/data-raw/')}"))
write_md5(intrinsic_resistant)
try(saveRDS(intrinsic_resistant, "data-raw/intrinsic_resistant.rds", version = 2, compress = "xz"), silent = TRUE)
try(write.table(intrinsic_resistant, "data-raw/intrinsic_resistant.txt", sep = "\t", na = "", row.names = FALSE), silent = TRUE)
try(haven::write_sas(intrinsic_resistant, "data-raw/intrinsic_resistant.sas"), silent = TRUE)
try(haven::write_sav(intrinsic_resistant, "data-raw/intrinsic_resistant.sav"), silent = TRUE)
try(haven::write_dta(intrinsic_resistant, "data-raw/intrinsic_resistant.dta"), silent = TRUE)
try(openxlsx::write.xlsx(intrinsic_resistant, "data-raw/intrinsic_resistant.xlsx"), silent = TRUE)
write_md5(intrinsicR)
try(saveRDS(intrinsicR, "data-raw/intrinsic_resistant.rds", version = 2, compress = "xz"), silent = TRUE)
try(write.table(intrinsicR, "data-raw/intrinsic_resistant.txt", sep = "\t", na = "", row.names = FALSE), silent = TRUE)
try(haven::write_sas(intrinsicR, "data-raw/intrinsic_resistant.sas"), silent = TRUE)
try(haven::write_sav(intrinsicR, "data-raw/intrinsic_resistant.sav"), silent = TRUE)
try(haven::write_dta(intrinsicR, "data-raw/intrinsic_resistant.dta"), silent = TRUE)
try(openxlsx::write.xlsx(intrinsicR, "data-raw/intrinsic_resistant.xlsx"), silent = TRUE)
}
if (changed_md5(dosage)) {

View File

@ -1 +1 @@
9f708801889d2eaf974c6eb85c83a8e7
4f082a7952a37133305f64d6f711e81e

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -31,6 +31,7 @@
"AZL" 6479523 "Azlocillin" "Beta-lactams/penicillins" "J01CA09" "Beta-lactam antibacterials, penicillins" "Penicillins with extended spectrum" "c(\"az\", \"azl\", \"azlo\")" "" 12 "g" ""
"ATM" 5742832 "Aztreonam" "Beta-lactams/penicillins" "J01DF01" "Other beta-lactam antibacterials" "Monobactams" "c(\"at\", \"atm\", \"azm\", \"azt\", \"aztr\")" "c(\"azactam\", \"azetreonam\", \"azthreonam\", \"aztreonam\", \"primbactam\")" 4 "g" "c(\"16423-6\", \"25234-6\", \"3369-6\")"
"AZA" "Aztreonam/avibactam" "Beta-lactams/penicillins" "" "" ""
"ANC" "Aztreonam/nacubactam" "Beta-lactams/penicillins" "" "" ""
"BAM" 441397 "Bacampicillin" "Beta-lactams/penicillins" "J01CA06" "Beta-lactam antibacterials, penicillins" "Penicillins with extended spectrum" "" "c(\"bacampicilina\", \"bacampicillin\", \"bacampicilline\", \"bacampicillinum\", \"penglobe\")" 1.2 "g" "character(0)"
"BAC" 78358334 "Bacitracin zinc" "Other antibacterials" "R02AB04" "baci" "" ""
"BDQ" 5388906 "Bedaquiline" "Other antibacterials" "J04AK05" "" "c(\"bedaquiline\", \"sirturo\")" 86 "mg" "80637-2"
@ -41,7 +42,7 @@
)" 3.6 "g" "3913-1"
"BES" 10178705 "Besifloxacin" "Quinolones" "S01AE08" "" "besifloxacin" "character(0)"
"BIA" 71339 "Biapenem" "Carbapenems" "J01DH05" "" "c(\"biapenem\", \"biapenern\", \"bipenem\", \"omegacin\")" 1.2 "g" "character(0)"
"BCZ" 65807 "Bicyclomycin (Bicozamycin)" "Other antibacterials" "" "c(\"aizumycin\", \"bacfeed\", \"bacteron\", \"bicozamicina\", \"bicozamycin\", \"bicozamycine\", \"bicozamycinum\")" "character(0)"
"BCZ" 65807 "Bicyclomycin" "Other antibacterials" "c(\"\", \"bicozamycin\")" "c(\"aizumycin\", \"bacfeed\", \"bacteron\", \"bicozamicina\", \"bicozamycin\", \"bicozamycine\", \"bicozamycinum\")" "character(0)"
"BDP" 68760 "Brodimoprim" "Trimethoprims" "J01EA02" "Sulfonamides and trimethoprim" "Trimethoprim and derivatives" "" "c(\"brodimoprim\", \"brodimoprima\", \"brodimoprime\", \"brodimoprimum\", \"bromdimoprim\", \"hyprim\", \"unitrim\")" 0.2 "g" "character(0)"
"BUT" 47472 "Butoconazole" "Antifungals/antimycotics" "G01AF15" "" "c(\"butaconazole\", \"butoconazol\", \"butoconazole\", \"butoconazolum\", \"compositenstarke\", \"dahlin\", \"femstat\", \"gynofort\", \"polyfructosanum\")" "character(0)"
"CDZ" 44242317 "Cadazolid" "Oxazolidinones" "" "cadazolid" "character(0)"
@ -67,11 +68,12 @@
"DIX" 6437877 "Cefditoren pivoxil" "Cephalosporins (3rd gen.)" "" "c(\"cefditoren\", \"cefditoren pi voxil\", \"cefditoren pivoxil\", \"cefditorin\", \"cefditorin pivoxil\", \"meiact\", \"spectracef\")" "character(0)"
"FEP" 5479537 "Cefepime" "Cephalosporins (4th gen.)" "J01DE01" "Other beta-lactam antibacterials" "Fourth-generation cephalosporins" "c(\"cfep\", \"cfpi\", \"cpe\", \"cpm\", \"fep\", \"pm\", \"xpm\")" "c(\"axepim\", \"cefepima\", \"cefepime\", \"cefepimum\", \"cepimax\", \"cepimex\", \"maxcef\", \"maxipime\")" 4 "g" "38363-8"
"CPC" 9567559 "Cefepime/clavulanic acid" "Cephalosporins (4th gen.)" "c(\"cicl\", \"xpml\")" "" ""
"FNC" "Cefepime/nacubactam" "Beta-lactams/penicillins" "" "" ""
"FPT" 9567558 "Cefepime/tazobactam" "Cephalosporins (4th gen.)" "" "" ""
"FPZ" "Cefepime/zidebactam" "Other antibacterials" "" "" ""
"CAT" 5487888 "Cefetamet" "Cephalosporins (3rd gen.)" "J01DD10" "Other beta-lactam antibacterials" "Third-generation cephalosporins" "" "c(\"cefetamet\", \"cefetametum\", \"cepime o\", \"deacetoxycefotaxime\")" 1 "g" "character(0)"
"CPI" 5486182 "Cefetamet pivoxil" "Cephalosporins (3rd gen.)" "" "c(\"cefetamet pivoxyl\", \"globocef\")" "character(0)"
"CCL" 71719688 "Cefetecol (Cefcatacol)" "Cephalosporins (4th gen.)" "" "" ""
"CCL" 71719688 "Cefetecol" "Cephalosporins (4th gen.)" "c(\"\", \"cefcatacol\")" "" ""
"CZL" 193956 "Cefetrizole" "Cephalosporins (unclassified gen.)" "" "c(\"cefetrizole\", \"cefetrizolum\")" "character(0)"
"FDC" 77843966 "Cefiderocol" "Other antibacterials" "J01DI04" "" "cefiderocol" "character(0)"
"CFM" 5362065 "Cefixime" "Cephalosporins (3rd gen.)" "J01DD08" "Other beta-lactam antibacterials" "Third-generation cephalosporins" "c(\"cfe\", \"cfix\", \"cfxm\", \"dcfm\", \"fix\", \"ix\")" "c(\"cefixim\", \"cefixima\", \"cefixime\", \"cefixime anhydrous\", \"cefiximum\", \"cefixoral\", \"cefspan\", \"cephoral\", \"denvar\", \"necopen\", \"suprax\", \"tricef\", \"unixime\")" 0.4 "g" "c(\"16567-0\", \"25236-1\")"
@ -176,7 +178,7 @@
"ECO" 3198 "Econazole" "Antifungals/antimycotics" "c(\"D01AC03\", \"G01AF05\")" "Antifungals for topical use" "Imidazole and triazole derivatives" "econ" "c(\"econazol\", \"econazole\", \"econazolum\", \"ecostatin\", \"ecostatin cream\", \"palavale\", \"pevaryl\", \"spectazole\", \"spectazole cream\")" "character(0)"
"ENX" 3229 "Enoxacin" "Quinolones" "J01MA04" "Quinolone antibacterials" "Fluoroquinolones" "c(\"\", \"enox\")" "c(\"almitil\", \"bactidan\", \"bactidron\", \"comprecin\", \"enofloxacine\", \"enoksetin\", \"enoram\", \"enoxacin\", \"enoxacina\", \"enoxacine\", \"enoxacino\", \"enoxacinum\", \"enoxen\", \"enoxin\", \"enoxor\", \"flumark\", \"penetrex\")" 0.8 "g" "c(\"16816-1\", \"3590-7\")"
"ENR" 71188 "Enrofloxacin" "Quinolones" "" "c(\"baytril\", \"enrofloxacin\", \"enrofloxacine\", \"enrofloxacino\", \"enrofloxacinum\")" "character(0)"
"ENV" 135565326 "Enviomycin (Tuberactinomycin)" "Antimycobacterials" "" "c(\"enviomicina\", \"enviomycin\", \"enviomycina\", \"enviomycinum\")" "character(0)"
"ENV" 135565326 "Enviomycin" "Antimycobacterials" "c(\"\", \"tuberactinomycin\")" "c(\"enviomicina\", \"enviomycin\", \"enviomycina\", \"enviomycinum\")" "character(0)"
"EPE" "Eperozolid" "Other antibacterials" "" "" ""
"EPC" 71392 "Epicillin" "Beta-lactams/penicillins" "J01CA07" "Beta-lactam antibacterials, penicillins" "Penicillins with extended spectrum" "" "c(\"dexacillin\", \"dihydroampicillin\", \"epicilina\", \"epicillin\", \"epicilline\", \"epicillinum\")" 2 "g" 2 "g" "character(0)"
"EPP" 68916 "Epiroprim" "Other antibacterials" "" "c(\"epiroprim\", \"epiroprima\", \"epiroprime\", \"epiroprimum\")" "character(0)"
@ -190,6 +192,7 @@
"ETI1" 2761171 "Ethionamide" "Antimycobacterials" "J04AD03" "Drugs for treatment of tuberculosis" "Thiocarbamide derivatives" "ethi" "c(\"aethionamidum\", \"aetina\", \"aetiva\", \"amidazin\", \"amidazine\", \"ethatyl\", \"ethimide\", \"ethina\", \"ethinamide\", \"ethionamide\", \"ethionamidum\", \"ethioniamide\", \"ethylisothiamide\", \"ethyonomide\", \"etimid\", \"etiocidan\", \"etionamid\", \"etionamida\", \"etionamide\", \"etioniamid\", \"etionid\", \"etionizin\", \"etionizina\", \"etionizine\", \"fatoliamid\", \"iridocin\", \"iridocin bayer\", \"iridozin\", \"isothin\", \"isotiamida\", \"itiocide\", \"nicotion\", \"nisotin\", \"nizotin\", \"rigenicid\", \"sertinon\", \"teberus\", \"thianid\", \"thianide\",
\"thioamide\", \"thiodine\", \"thiomid\", \"thioniden\", \"tianid\", \"tiomid\", \"trecator\", \"trecator sc\", \"trekator\", \"trescatyl\", \"trescazide\", \"tubenamide\", \"tubermin\", \"tuberoid\", \"tuberoson\")" 0.75 "g" "16845-0"
"ETO" 6034 "Ethopabate" "Other antibacterials" "" "c(\"amprol plus\", \"ethopabat\", \"ethopabate\", \"ethyl pabate\")" "character(0)"
"EXE" "Exebacase" "" "" ""
"FAR" 65894 "Faropenem" "Other antibacterials" "J01DI03" "Other beta-lactam antibacterials" "Other cephalosporins and penems" "" "c(\"faropenem\", \"faropenem sodium\", \"fropenem\", \"fropenum sodium\")" 0.75 "g" "character(0)"
"FDX" 10034073 "Fidaxomicin" "Other antibacterials" "A07AA12" "" "c(\"dificid\", \"dificlir\", \"difimicin\", \"fidaxomicin\", \"lipiarmycin\", \"tiacumicin b\")" 0.4 "g" "character(0)"
"FIN" 11567473 "Finafloxacin" "Quinolones" "" "finafloxacin" "character(0)"
@ -214,7 +217,7 @@
"GAT" 5379 "Gatifloxacin" "Quinolones" "c(\"J01MA16\", \"S01AE06\")" "Quinolone antibacterials" "Fluoroquinolones" "c(\"\", \"gati\")" "c(\"gatiflo\", \"gatifloxacin\", \"gatifloxacine\", \"gatifloxcin\", \"gatilox\", \"gatiquin\", \"gatispan\", \"tequin\", \"tequin and zymar\", \"zymaxid\")" 0.4 "g" 0.4 "g" "character(0)"
"GEM" 9571107 "Gemifloxacin" "Quinolones" "J01MA15" "Quinolone antibacterials" "Fluoroquinolones" "" "c(\"factiv\", \"factive\", \"gemifioxacin\", \"gemifloxacin\", \"gemifloxacine\", \"gemifloxacino\", \"gemifloxacinum\")" 0.32 "g" "character(0)"
"GEN" 3467 "Gentamicin" "Aminoglycosides" "c(\"D06AX07\", \"J01GB03\", \"S01AA11\", \"S02AA14\", \"S03AA06\")" "Aminoglycoside antibacterials" "Other aminoglycosides" "c(\"cn\", \"gen\", \"gent\", \"gm\")" "c(\"apogen\", \"centicin\", \"cidomycin\", \"garasol\", \"genoptic liquifilm\", \"genoptic s.o.p.\", \"gentacycol\", \"gentafair\", \"gentak\", \"gentamar\", \"gentamcin sulfate\", \"gentamicin\", \"gentamicina\", \"gentamicine\", \"gentamicins\", \"gentamicinum\", \"gentamycin\", \"gentamycins\", \"gentamycinum\", \"gentavet\", \"gentocin\", \"jenamicin\", \"lyramycin\", \"oksitselanim\", \"refobacin\", \"refobacin tm\", \"septigen\", \"uromycine\")" 0.24 "g" "c(\"13561-6\", \"13562-4\", \"15106-8\", \"22746-2\", \"22747-0\", \"31091-2\", \"31092-0\", \"31093-8\", \"35668-3\", \"3663-2\", \"3664-0\", \"3665-7\", \"39082-3\", \"47109-4\", \"59379-8\", \"80971-5\", \"88111-0\")"
"GEH" "Gentamicin-high" "Aminoglycosides" "c(\"g_h\", \"gehl\", \"genta high\", \"gentamicin high\")" "" ""
"GEH" "Gentamicin-high" "Aminoglycosides" "c(\"gehi\", \"gehl\", \"genta high\", \"gentamicin high\")" "" ""
"GEP" 25101874 "Gepotidacin" "Other antibacterials" "" "gepotidacin" "character(0)"
"GRX" 72474 "Grepafloxacin" "Quinolones" "J01MA11" "Quinolone antibacterials" "Fluoroquinolones" "c(\"\", \"grep\")" "grepafloxacin" 0.4 "g" "character(0)"
"GRI" 441140 "Griseofulvin" "Antifungals/antimycotics" "c(\"D01AA08\", \"D01BA01\")" "" "c(\"amudane\", \"curling factor\", \"delmofulvina\", \"fulcin\", \"fulcine\", \"fulvican grisactin\", \"fulvicin\", \"fulvicin bolus\", \"fulvidex\", \"fulvina\", \"fulvinil\", \"fulvistatin\", \"fungivin\", \"greosin\", \"gresfeed\", \"gricin\", \"grifulin\", \"grifulvin\", \"grifulvin v\", \"grisactin\", \"grisactin ultra\", \"grisactin v\", \"griscofulvin\", \"grise ostatin\", \"grisefuline\", \"griseo\", \"griseofulvin\", \"griseofulvin forte\", \"griseofulvina\", \"griseofulvine\", \"griseofulvinum\", \"griseomix\", \"griseostatin\", \"grisetin\", \"grisofulvin\",
@ -223,6 +226,7 @@
"HCH" 11979956 "Hachimycin" "Antifungals/antimycotics" "c(\"D01AA03\", \"G01AA06\", \"J02AA02\")" "Antimycotics for systemic use" "Antibiotics" "" "c(\"cabimicina\", \"hachimicina\", \"hachimycin\", \"hachimycine\", \"hachimycinum\", \"trichomycinum\", \"trichonat\")" "character(0)"
"HET" 443387 "Hetacillin" "Beta-lactams/penicillins" "J01CA18" "Beta-lactam antibacterials, penicillins" "Penicillins with extended spectrum" "" "c(\"etacillina\", \"hetacilina\", \"hetacillin\", \"hetacilline\", \"hetacillinum\", \"phenazacillin\", \"versapen\")" 2 "g" "character(0)"
"HYG" 56928061 "Hygromycin" "Aminoglycosides" "" "c(\"antihelmycin\", \"hydromycin b\", \"hygrovetine\")" "character(0)"
"IBX" "Ibrexafungerp" "Antifungals" "" "" ""
"ICL" 213043 "Iclaprim" "Other antibacterials" "J01EA03" "" "c(\"iclaprim\", \"mersarex\")" "character(0)"
"IPM" 104838 "Imipenem" "Carbapenems" "J01DH51" "Other beta-lactam antibacterials" "Carbapenems" "c(\"imci\", \"imi\", \"imip\", \"imp\")" "c(\"imipemide\", \"imipenem\", \"imipenem anhydrous\", \"imipenem/cilastatin\", \"imipenemum\", \"imipenen\", \"primaxin\", \"tienamycin\")" 2 "g" "c(\"17010-0\", \"25257-7\", \"27331-8\", \"3688-9\")"
"IPE" "Imipenem/EDTA" "Carbapenems" "" "" ""
@ -241,14 +245,14 @@
"KAH" "Kanamycin-high" "Aminoglycosides" "c(\"\", \"k_h\", \"kahl\")" "" ""
"KAC" "Kanamycin/cephalexin" "Aminoglycosides" "" "" ""
"KET" 456201 "Ketoconazole" "Antifungals/antimycotics" "c(\"D01AC08\", \"G01AF11\", \"H02CA03\", \"J02AB02\")" "Antimycotics for systemic use" "Imidazole derivatives" "c(\"keto\", \"ktc\")" "c(\"extina\", \"fungarest\", \"fungoral\", \"ketocanazole\", \"ketoconazol\", \"ketoconazole\", \"ketoconazolum\", \"ketoderm\", \"nizoral\", \"xolegel\")" 0.2 "g" "c(\"10990-0\", \"12393-5\", \"25259-3\", \"60091-6\", \"60092-4\")"
"KIT" "Kitasamycin (Leucomycin)" "Macrolides/lincosamides" "" "" ""
"KIT" "Kitasamycin" "Macrolides/lincosamides" "c(\"\", \"leucomycin\")" "" ""
"LAS" 5360807 "Lasalocid" "Other antibacterials" "" "c(\"avatec\", \"lasalocid\", \"lasalocid a\", \"lasalocide\", \"lasalocide a\", \"lasalocido\", \"lasalocidum\")" "87598-9"
"LTM" 47499 "Latamoxef" "Cephalosporins (3rd gen.)" "J01DD06" "Other beta-lactam antibacterials" "Third-generation cephalosporins" "c(\"mox\", \"moxa\")" "c(\"disodium moxalactam\", \"festamoxin\", \"lamoxactam\", \"latamoxef\", \"latamoxefum\", \"shiomarin\")" 4 "g" "character(0)"
"LTM" 47499 "Latamoxef" "Cephalosporins (3rd gen.)" "J01DD06" "Other beta-lactam antibacterials" "Third-generation cephalosporins" "c(\"mox\", \"moxa\", \"moxalactam\")" "c(\"disodium moxalactam\", \"festamoxin\", \"lamoxactam\", \"latamoxef\", \"latamoxefum\", \"shiomarin\")" 4 "g" "character(0)"
"LMU" 25185057 "Lefamulin" "Other antibacterials" "J01XX12" "" "lefamulin" "character(0)"
"LEN" 65646 "Lenampicillin" "Beta-lactams/penicillins" "" "c(\"lenampicilina\", \"lenampicillin\", \"lenampicillin hcl\", \"lenampicilline\", \"lenampicillinum\")" "character(0)"
"LVX" 149096 "Levofloxacin" "Quinolones" "c(\"J01MA12\", \"S01AE05\")" "Quinolone antibacterials" "Fluoroquinolones" "c(\"le\", \"lev\", \"levo\", \"lvx\")" "c(\"aeroquin\", \"cravit\", \"cravit hydrate\", \"cravit iv\", \"cravit ophthalmic\", \"elequine\", \"floxacin\", \"floxel\", \"iquix hydrate\", \"leroxacin\", \"lesacin\", \"levaquin\", \"levaquin hydrate\", \"levo floxacin\", \"levofiexacin\", \"levofloxacin\", \"levofloxacin hydrate\", \"levofloxacine\", \"levofloxacino\", \"levofloxacinum\", \"levokacin\", \"levoxacin\", \"mosardal\", \"nofaxin\", \"oftaquix\", \"quixin\", \"reskuin\", \"tavanic\", \"unibiotic\", \"venaxan\", \"volequin\")" 0.5 "g" 0.5 "g" "c(\"21368-6\", \"30532-6\", \"30533-4\")"
"LND" 9850038 "Levonadifloxacin" "Quinolones" "J01MA24" "" "levonadifloxacin" "character(0)"
"LSP" "Linco-spectin (lincomycin/spectinomycin)" "Other antibacterials" "" "" ""
"LSP" "Linco-spectin" "Other antibacterials" "c(\"\", \"lincomycin/spectinomycin\")" "" ""
"LIN" 3000540 "Lincomycin" "Macrolides/lincosamides" "J01FF02" "Macrolides, lincosamides and streptogramins" "Lincosamides" "linc" "c(\"cillimycin\", \"jiemycin\", \"lincolcina\", \"lincolnensin\", \"lincomicina\", \"lincomycin\", \"lincomycin a\", \"lincomycine\", \"lincomycinum\")" 1.8 "g" 1.8 "g" "87597-1"
"LNZ" 441401 "Linezolid" "Oxazolidinones" "J01XX08" "Other antibacterials" "Other antibacterials" "c(\"line\", \"lnz\", \"lz\", \"lzd\")" "c(\"linezlid\", \"linezoid\", \"linezolid\", \"linezolide\", \"linezolidum\", \"zivoxid\", \"zyvoxa\", \"zyvoxam\", \"zyvoxid\")" 1.2 "g" 1.2 "g" "c(\"34202-2\", \"80609-1\")"
"LFE" "Linoprist-flopristin" "Other antibacterials" "" "" ""
@ -256,8 +260,9 @@
"LOR" 5284585 "Loracarbef" "Cephalosporins (2nd gen.)" "J01DC08" "Other beta-lactam antibacterials" "Second-generation cephalosporins" "c(\"\", \"lora\")" "c(\"anhydrous loracarbef\", \"lorabid\", \"loracarbef\", \"loracarbefum\", \"lorbef\", \"loribid\")" 0.6 "g" "character(0)"
"LYM" 54707177 "Lymecycline" "Tetracyclines" "J01AA04" "Tetracyclines" "Tetracyclines" "" "c(\"biovetin\", \"chlortetracyclin\", \"ciclisin\", \"ciclolysal\", \"infaciclina\", \"limeciclina\", \"lisinbiotic\", \"lymecyclin\", \"lymecycline\", \"lymecyclinum\", \"mucomycin\", \"ntetracycline\", \"tetralisal\", \"tetralysal\", \"vebicyclysal\")" 0.6 "g" 0.6 "g" "character(0)"
"MNA" 1292 "Mandelic acid" "Other antibacterials" "c(\"B05CA06\", \"J01XX06\")" "Other antibacterials" "Other antibacterials" "" "c(\"acido mandelico\", \"almond acid\", \"amygdalic acid\", \"benzoglycolic acid\", \"hydroxyacetic acid\", \"kyselina mandlova\", \"mandelic acid\", \"paramandelic acid\", \"phenylglycolic acid\", \"uromaline\")" 12 "g" "character(0)"
"MGX" "Manogepix" "Antifungals" "" "" ""
"MAR" 60651 "Marbofloxacin" "Quinolones" "" "c(\"marbocyl\", \"marbofloxacin\", \"marbofloxacine\", \"marbofloxacino\", \"marbofloxacinum\", \"zeniquin\")" "character(0)"
"MEC" 36273 "Mecillinam (Amdinocillin)" "Beta-lactams/penicillins" "J01CA11" "Beta-lactam antibacterials, penicillins" "Penicillins with extended spectrum" "" "c(\"amdinocillin\", \"coactin\", \"hexacillin\", \"mecilinamo\", \"mecillinam\", \"mecillinamum\", \"micillinam\", \"penicillin hx\", \"selexidin\")" 1.2 "g" "character(0)"
"MEC" 36273 "Mecillinam" "Beta-lactams/penicillins" "J01CA11" "Beta-lactam antibacterials, penicillins" "Penicillins with extended spectrum" "c(\"\", \"amdinocillin\")" "c(\"amdinocillin\", \"coactin\", \"hexacillin\", \"mecilinamo\", \"mecillinam\", \"mecillinamum\", \"micillinam\", \"penicillin hx\", \"selexidin\")" 1.2 "g" "character(0)"
"MEL" 71306732 "Meleumycin" "Macrolides/lincosamides" "" "" ""
"MEM" 441130 "Meropenem" "Carbapenems" "J01DH02" "Other beta-lactam antibacterials" "Carbapenems" "c(\"mem\", \"mer\", \"mero\", \"mp\", \"mrp\")" "c(\"meronem\", \"meropen\", \"meropenem\", \"meropenem anhydrous\", \"meropenem hydrate\", \"meropenem trihydrate\", \"meropenemum\", \"merrem\", \"merrem i.v.\", \"merrem iv\")" 3 "g" "41406-0"
"MNC" "Meropenem/nacubactam" "Carbapenems" "" "" ""
@ -324,6 +329,7 @@
"OXO" 4628 "Oxolinic acid" "Quinolones" "J01MB05" "Quinolone antibacterials" "Other quinolones" "" "c(\"acide oxolinique\", \"acido ossolico\", \"acido oxolinico\", \"acidum oxolinicum\", \"aqualinic\", \"cistopax\", \"dioxacin\", \"emyrenil\", \"gramurin\", \"inoxyl\", \"nidantin\", \"oksaren\", \"orthurine\", \"ossian\", \"oxoboi\", \"oxolinic\", \"oxolinic acid\", \"pietil\", \"prodoxal\", \"prodoxol\", \"starner\", \"tiurasin\", \"ultibid\", \"urinox\", \"uritrate\", \"urotrate\", \"uroxol\", \"utibid\")" 1 "g" "character(0)"
"OXY" 54675779 "Oxytetracycline" "Tetracyclines" "c(\"D06AA03\", \"G01AA07\", \"J01AA06\", \"S01AA04\")" "Tetracyclines" "Tetracyclines" "" "c(\"adamycin\", \"berkmycen\", \"biostat\", \"biostat pa\", \"dabicycline\", \"dalimycin\", \"embryostat\", \"fanterrin\", \"galsenomycin\", \"geomycin\", \"geotilin\", \"hydroxytetracyclinum\", \"imperacin\", \"lenocycline\", \"macocyn\", \"medamycin\", \"mepatar\", \"oksisyklin\", \"ossitetraciclina\", \"oxacycline\", \"oxitetraciclina\", \"oxitetracyclin\", \"oxitetracycline\", \"oxitetracyclinum\", \"oxydon\", \"oxymycin\", \"oxymykoin\", \"oxypam\", \"oxysteclin\", \"oxyterracin\", \"oxyterracine\", \"oxyterracyne\", \"oxytetracid\", \"oxytetracyclin\", \"oxytetracycline\",
\"oxytetracycline base\", \"oxytetracyclinum\", \"proteroxyna\", \"riomitsin\", \"ryomycin\", \"solkaciclina\", \"stecsolin\", \"stevacin\", \"tarocyn\", \"tarosin\", \"teravit\", \"terrafungine\", \"terramitsin\", \"terramycin\", \"terramycin im\", \"tetran\", \"unimycin\", \"ursocyclin\", \"ursocycline\", \"vendarcin\")" 1 "g" 1 "g" "c(\"17396-3\", \"25266-8\", \"87595-5\")"
"OZN" "Ozenoxacin" "" "" ""
"PAS" 4649 "P-aminosalicylic acid" "Antimycobacterials" "" "c(\"aminopar\", \"aminosalicylic\", \"aminosalicylic acid\", \"aminosalyl\", \"aminox\", \"apacil\", \"deapasil\", \"entepas\", \"ferrosan\", \"gabbropas\", \"helipidyl\", \"hellipidyl\", \"neopasalate\", \"osacyl\", \"pamacyl\", \"pamisyl\", \"paramycin\", \"parasal\", \"parasalicil\", \"parasalindon\", \"pasalon\", \"pasara\", \"pascorbic\", \"pasdium\", \"paser granules\", \"paskalium\", \"pasmed\", \"pasnodia\", \"pasolac\", \"propasa\", \"rezipas\", \"teebacin\", \"wln: zr cq dvq\")" "character(0)"
"PAN" 72015 "Panipenem" "Carbapenems" "" "c(\"panipenem\", \"panipenemum\", \"penipanem\")" "character(0)"
"PAR" 165580 "Paromomycin" "Other antibacterials" "A07AA06" "" "c(\"aminosidin\", \"aminosidine\", \"aminosidine i\", \"aminosidine sulfate\", \"amminosidin\", \"crestomycin\", \"estomycin\", \"gabbromicina\", \"gabbromycin\", \"gabromycin\", \"humatin\", \"humycin\", \"hydroxymycin\", \"hydroxymycin sulfate\", \"monomycin\", \"monomycin a\", \"neomycin e\", \"paramomycin\", \"paramomycin sulfate\", \"paromomicina\", \"paromomycin\", \"paromomycin i\", \"paromomycine\", \"paromomycinum\", \"paucimycin\", \"paucimycinum\", \"quintomycin c\")" 3 "g" "character(0)"
@ -338,7 +344,7 @@
"PEX" 16132253 "Pexiganan" "Other antibacterials" "" "pexiganan" "character(0)"
"PHE" 272833 "Phenethicillin" "Beta-lactams/penicillins" "J01CE05" "Beta-lactam antibacterials, penicillins" "Beta-lactamase sensitive penicillins" "c(\"\", \"fene\")" "c(\"feneticilina\", \"feneticillina\", \"feneticilline\", \"k phenethicillin\", \"phenethicilin\", \"phenethicillinum\", \"pheneticillin\", \"pheneticilline\", \"pheneticillinum\", \"phenoxy pc\", \"potassium penicillin\")" 1 "g" "41471-4"
"PHN" 6869 "Phenoxymethylpenicillin" "Beta-lactams/penicillins" "J01CE02" "Beta-lactam antibacterials, penicillins" "Beta-lactamase sensitive penicillins" "c(\"fepe\", \"peni v\", \"penicillin v\", \"pnv\", \"pv\")" "c(\"acipen v\", \"apocillin\", \"apopen\", \"beromycin\", \"calcipen\", \"compocillin v\", \"crystapen v\", \"distaquaine v\", \"eskacillian v\", \"eskacillin v\", \"fenacilin\", \"fenospen\", \"meropenin\", \"oracillin\", \"oratren\", \"penicillin v\", \"phenocillin\", \"phenomycilline\", \"phenopenicillin\", \"robicillin\", \"rocilin\", \"stabicillin\", \"vebecillin\", \"veetids\", \"vegacillin\")" 2 "g" "character(0)"
"PMR" 5284447 "Pimaricin (Natamycin)" "Antifungals/antimycotics" "" "c(\"delvocid\", \"mycophyt\", \"myprozine\", \"natacyn\", \"natamicina\", \"natamycin\", \"natamycine\", \"natamycinum\", \"pimafucin\", \"pimaracin\", \"pimarizin\", \"synogil\", \"tennecetin\")" "character(0)"
"PMR" 5284447 "Pimaricin" "Antifungals/antimycotics" "c(\"\", \"natamycin\")" "c(\"delvocid\", \"mycophyt\", \"myprozine\", \"natacyn\", \"natamicina\", \"natamycin\", \"natamycine\", \"natamycinum\", \"pimafucin\", \"pimaracin\", \"pimarizin\", \"synogil\", \"tennecetin\")" "character(0)"
"PPA" 4831 "Pipemidic acid" "Quinolones" "J01MB04" "Quinolone antibacterials" "Other quinolones" "c(\"pipz\", \"pizu\")" "c(\"acide pipemidique\", \"acido pipemidico\", \"acidum pipemidicum\", \"deblaston\", \"dolcol\", \"pipedac\", \"pipemid\", \"pipemidic\", \"pipemidic acid\", \"pipemidicacid\", \"pipram\", \"uromidin\")" 0.8 "g" "character(0)"
"PIP" 43672 "Piperacillin" "Beta-lactams/penicillins" "J01CA12" "Beta-lactam antibacterials, penicillins" "Penicillins with extended spectrum" "c(\"pi\", \"pip\", \"pipc\", \"pipe\", \"pp\")" "c(\"isipen\", \"pentcillin\", \"peperacillin\", \"peracin\", \"piperacilina\", \"piperacillin\", \"piperacillin na\", \"piperacillin sodium\", \"piperacilline\", \"piperacillinum\", \"pipercillin\", \"pipracil\", \"pipril\")" 14 "g" "c(\"25268-4\", \"3972-7\")"
"PIS" "Piperacillin/sulbactam" "Beta-lactams/penicillins" "" "" ""
@ -368,7 +374,8 @@
"RAC" 56052 "Ractopamine" "Other antibacterials" "" "c(\"ractopamina\", \"ractopamine\", \"ractopaminum\")" "character(0)"
"RAM" 16132338 "Ramoplanin" "Glycopeptides" "" "ramoplanin" "character(0)"
"RZM" 10993211 "Razupenem" "Carbapenems" "" "razupenem" "character(0)"
"RTP" 6918462 "Retapamulin" "Other antibacterials" "D06AX13" "Antibiotics for topical use" "Other antibiotics for topical use" "" "c(\"altabax\", \"altargo\", \"retapamulin\")" "character(0)"
"RTP" 6918462 "Retapamulin" "Other antibacterials" "D06AX13" "Antibiotics for topical use" "Other antibiotics for topical use" "c(\"\", \"ret\")" "c(\"altabax\", \"altargo\", \"retapamulin\")" "character(0)"
"RZF" "Rezafungin" "Antifungals" "" "" ""
"RBC" 44631912 "Ribociclib" "Antifungals/antimycotics" "L01EF02" "Antimycotics for systemic use" "Triazole derivatives" "ribo" "c(\"kisqali\", \"ribociclib\")" "character(0)"
"RST" 33042 "Ribostamycin" "Aminoglycosides" "J01GB10" "Aminoglycoside antibacterials" "Other aminoglycosides" "" "c(\"dekamycin iv\", \"hetangmycin\", \"ribastamin\", \"ribostamicina\", \"ribostamycin\", \"ribostamycine\", \"ribostamycinum\", \"vistamycin\", \"xylostatin\")" 1 "g" "character(0)"
"RID1" 16659285 "Ridinilazole" "Other antibacterials" "" "ridinilazole" "character(0)"
@ -379,7 +386,7 @@
"RPEI" "Rifampicin/pyrazinamide/ethambutol/isoniazid" "Antimycobacterials" "J04AM06" "Drugs for treatment of tuberculosis" "Combinations of drugs for treatment of tuberculosis" "" "" ""
"RPI" "Rifampicin/pyrazinamide/isoniazid" "Antimycobacterials" "J04AM05" "Drugs for treatment of tuberculosis" "Combinations of drugs for treatment of tuberculosis" "" "" ""
"RFM" 6324616 "Rifamycin" "Antimycobacterials" "c(\"A07AA13\", \"D06AX15\", \"J04AB03\", \"S01AA16\", \"S02AA12\")" "Drugs for treatment of tuberculosis" "Antibiotics" "" "c(\"aemcolo\", \"rifacin\", \"rifamicina\", \"rifamicine sv\", \"rifamycin\", \"rifamycine\", \"rifamycinum\", \"rifocin\", \"rifocyn\", \"rifomycin\", \"rifomycin sv\", \"tuborin\")" 0.6 "g" "character(0)"
"RFP" 135403821 "Rifapentine" "Antimycobacterials" "J04AB05" "Drugs for treatment of tuberculosis" "Antibiotics" "rifp" "c(\"cyclopentyl rifampin\", \"priftin\", \"rifapentin\", \"rifapentina\", \"rifapentine\", \"rifapentinum\")" 0.11 "g" "character(0)"
"RFP" 135403821 "Rifapentine" "Antimycobacterials" "J04AB05" "Drugs for treatment of tuberculosis" "Antibiotics" "c(\"rifp\", \"rpt\")" "c(\"cyclopentyl rifampin\", \"priftin\", \"rifapentin\", \"rifapentina\", \"rifapentine\", \"rifapentinum\")" 0.11 "g" "character(0)"
"RFX" 6436173 "Rifaximin" "Other antibacterials" "c(\"A07AA11\", \"D06AX11\")" "Intestinal antiinfectives" "Antibiotics" "" "c(\"fatroximin\", \"flonorm\", \"lormyx\", \"lumenax\", \"normix\", \"redactiv\", \"rifacol\", \"rifamixin\", \"rifaxidin\", \"rifaximin\", \"rifaximina\", \"rifaximine\", \"rifaximinum\", \"rifaxin\", \"ritacol\", \"spiraxin\", \"xifaxan\", \"xifaxsan\")" 0.6 "g" "character(0)"
"RIT" 65633 "Ritipenem" "Carbapenems" "" "ritipenem" "character(0)"
"RIA" 163692 "Ritipenem acoxil" "Carbapenems" "" "ritipenem acoxil" "character(0)"
@ -403,7 +410,7 @@
"SPM" "Spiramycin/metronidazole" "Other antibacterials" "J01RA04" "Combinations of antibacterials" "Combinations of antibacterials" "" "" ""
"STR" "Streptoduocin" "Aminoglycosides" "J01GA02" "Aminoglycoside antibacterials" "Streptomycins" "" "" 1 "g" ""
"STR1" 19649 "Streptomycin" "Aminoglycosides" "c(\"A07AA04\", \"J01GA01\")" "Aminoglycoside antibacterials" "Streptomycins" "c(\"s\", \"stm\", \"str\", \"stre\")" "c(\"agrept\", \"agrimycin\", \"chemform\", \"estreptomicina\", \"neodiestreptopab\", \"strepcen\", \"streptomicina\", \"streptomycin\", \"streptomycin a\", \"streptomycin spx\", \"streptomycin sulfate\", \"streptomycine\", \"streptomyzin\", \"vetstrep\")" 1 "g" "4039-4"
"STH" "Streptomycin-high" "Aminoglycosides" "c(\"s_h\", \"sthl\", \"strepto high\", \"streptomycin high\")" "" ""
"STH" "Streptomycin-high" "Aminoglycosides" "c(\"sthi\", \"sthl\", \"strepto high\", \"streptomycin high\")" "" ""
"STI" "Streptomycin/isoniazid" "Antimycobacterials" "J04AM01" "Drugs for treatment of tuberculosis" "Combinations of drugs for treatment of tuberculosis" "" "" ""
"SUL" 130313 "Sulbactam" "Beta-lactams/penicillins" "J01CG01" "Beta-lactam antibacterials, penicillins" "Beta-lactamase inhibitors" "" "c(\"betamaze\", \"sulbactam\", \"sulbactam acid\", \"sulbactam free acid\", \"sulbactamum\")" 1 "g" "character(0)"
"SBC" 20055036 "Sulbenicillin" "Beta-lactams/penicillins" "J01CA16" "Beta-lactam antibacterials, penicillins" "Penicillins with extended spectrum" "" "c(\"kedacillina\", \"sulbenicilina\", \"sulbenicilline\", \"sulbenicillinum\")" 15 "g" "character(0)"
@ -500,7 +507,7 @@
"TVA" 62959 "Trovafloxacin" "Quinolones" "J01MA13" "Quinolone antibacterials" "Fluoroquinolones" "c(\"\", \"trov\")" "c(\"trovafloxacin\", \"trovan\")" 0.2 "g" 0.2 "g" "character(0)"
"TUL" 9832301 "Tulathromycin" "Macrolides/lincosamides" "" "c(\"draxxin\", \"tulathrmycin a\", \"tulathromycin\", \"tulathromycin a\")" "character(0)"
"TYL" 5280440 "Tylosin" "Macrolides/lincosamides" "" "c(\"fradizine\", \"tilosina\", \"tylocine\", \"tylosin\", \"tylosin a\", \"tylosine\", \"tylosinum\")" "87587-2"
"TYL1" 6441094 "Tylvalosin" "Macrolides/lincosamides" "" "" ""
"TYL1" 6441094 "Tylvalosin" "Macrolides/lincosamides" "c(\"\", \"tvn\")" "" ""
"PRU1" 124225 "Ulifloxacin (Prulifloxacin)" "Other antibacterials" "" "ulifloxacin" "character(0)"
"VAN" 14969 "Vancomycin" "Glycopeptides" "c(\"A07AA09\", \"J01XA01\", \"S01AA28\")" "Other antibacterials" "Glycopeptide antibacterials" "c(\"va\", \"van\", \"vanc\")" "c(\"vancocin\", \"vancocin hcl\", \"vancoled\", \"vancomicina\", \"vancomycin\", \"vancomycin hcl\", \"vancomycine\", \"vancomycinum\", \"vancor\", \"viomycin derivative\")" 2 "g" 2 "g" "c(\"13586-3\", \"13587-1\", \"20578-1\", \"31012-8\", \"39092-2\", \"39796-8\", \"39797-6\", \"4089-9\", \"4090-7\", \"4091-5\", \"4092-3\", \"50938-0\", \"59381-4\")"
"VAM" "Vancomycin-macromethod" "Glycopeptides" "" "" ""
@ -509,3 +516,4 @@
"VOR" 71616 "Voriconazole" "Antifungals/antimycotics" "J02AC03" "Antimycotics for systemic use" "Triazole derivatives" "c(\"vori\", \"vrc\")" "c(\"pfizer\", \"vfend i.v.\", \"voriconazol\", \"voriconazole\", \"voriconazolum\", \"vorikonazole\")" 0.4 "g" 0.4 "g" "c(\"38370-3\", \"53902-3\", \"73676-9\", \"80553-1\", \"80651-3\")"
"XBR" 72144 "Xibornol" "Other antibacterials" "J01XX02" "Other antibacterials" "Other antibacterials" "" "c(\"bactacine\", \"bracen\", \"nanbacine\", \"xibornol\", \"xibornolo\", \"xibornolum\")" "character(0)"
"ZID" 77846445 "Zidebactam" "Other antibacterials" "" "zidebactam" "character(0)"
"ZFD" "Zoliflodacin" "" "" ""

View File

@ -7,7 +7,7 @@
# The like.is.one_of column must be 'like' or 'is' or 'one_of' ('like' will read the 'this_value' column as regular expression)
# The EUCAST guideline contains references to the 'Burkholderia cepacia complex'. All species in this group are noted on the 'B.cepacia' sheet of the EUCAST Clinical Breakpoint v.10.0 Excel file of 2020 (v_10.0_Breakpoint_Tables.xlsx).
# >>>>> IF YOU WANT TO IMPORT THIS FILE INTO YOUR OWN SOFTWARE, HAVE THE FIRST 10 LINES SKIPPED <<<<<
# -------------------------------------------------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------------------------------------------------
if_mo_property like.is.one_of this_value and_these_antibiotics have_these_values then_change_these_antibiotics to_value reference.rule reference.rule_group reference.version note
order is Enterobacterales AMP S AMX S Enterobacterales (Order) Breakpoints 10
order is Enterobacterales AMP I AMX I Enterobacterales (Order) Breakpoints 10
@ -303,7 +303,7 @@ fullname like ^Citrobacter (koseri|amalonaticus|sedlakii|farmeri|rodentium) am
fullname like ^Citrobacter (freundii|braakii|murliniae|werkmanii|youngae) aminopenicillins, AMC, SAM, CZO, CEP, LEX, CFR, FOX R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.2
genus_species is Enterobacter cloacae aminopenicillins, AMC, SAM, CZO, CEP, LEX, CFR, FOX R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.2
genus_species is Escherichia hermannii aminopenicillins, TIC R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.2
genus_species is Hafnia alvei aminopenicillins, AMC, SAM, CZO, CEP, LEX, CFR, FOX, polymyxins R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.2
genus_species is Hafnia alvei aminopenicillins, AMC, SAM, CXM, CZO, CEP, LEX, CFR, FOX, polymyxins R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.2
genus_species is Klebsiella aerogenes aminopenicillins, AMC, SAM, CZO, CEP, LEX, CFR, FOX R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.2
genus_species is Klebsiella oxytoca aminopenicillins, TIC R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.2
fullname like ^Klebsiella( pneumoniae| quasipneumoniae| variicola)? aminopenicillins, TIC R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.2
@ -367,7 +367,7 @@ genus_species one_of Escherichia coli, Proteus mirabilis AMP R PIP R Expert Rule
genus_species one_of Escherichia coli, Proteus mirabilis AMP S PIP S Expert Rules on Enterobacterales Expert Rules 3.2
fullname like ^(Klebsiella(?! aerogenes)|Raoultella) PIP R Expert Rules on Enterobacterales Expert Rules 3.2
fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter freundii|Serratia|Morganella morganii|Hafnia alvei|Providencia) CXM S CXM, cephalosporins_2nd R Expert Rules on Enterobacterales Expert Rules 3.2
genus one_of Arsenophonus, Biostraticola, Brenneria, Buchnera, Budvicia, Buttiauxella, Cedecea, Citrobacter, Cosenzaea, Cronobacter, Dickeya, Edwardsiella, Enterobacillus, Enterobacter, Erwinia, Escherichia, Ewingella, Franconibacter, Gibbsiella, Hafnia, Izhakiella, Klebsiella, Kluyvera, Kosakonia, Leclercia, Lelliottia, Leminorella, Lonsdalea, Mangrovibacter, Metakosakonia, Mixta, Moellerella, Morganella, Obesumbacterium, Pantoea, Pectobacterium, Phaseolibacter, Photorhabdus, Phytobacter, Plesiomonas, Pluralibacter, Pragia, Proteus, Providencia, Pseudescherichia, Pseudocitrobacter, Rahnella, Raoultella, Rosenbergiella, Rouxiella, Saccharobacter, Samsonia, Serratia, Shigella, Shimwellia, Siccibacter, Sodalis, Tatumella, Thorsellia, Trabulsiella, Wigglesworthia, Xenorhabdus, Yersinia, Yokenella CIP R fluoroquinolones R Expert Rules on Enterobacterales Expert Rules 3.2 This is Enterobacterales except Salmonella spp.
genus one_of Arsenophonus, Biostraticola, Brenneria, Buchnera, Budvicia, Buttiauxella, Cedecea, Citrobacter, Cosenzaea, Cronobacter, Dickeya, Edwardsiella, Enterobacillus, Enterobacter, Erwinia, Escherichia, Ewingella, Franconibacter, Gibbsiella, Hafnia, Izhakiella, Klebsiella, Kluyvera, Kosakonia, Leclercia, Lelliottia, Leminorella, Lonsdalea, Mangrovibacter, Mixta, Moellerella, Morganella, Obesumbacterium, Pantoea, Pectobacterium, Phaseolibacter, Photorhabdus, Phytobacter, Plesiomonas, Pluralibacter, Pragia, Proteus, Providencia, Pseudescherichia, Pseudocitrobacter, Rahnella, Raoultella, Rosenbergiella, Rouxiella, Saccharobacter, Samsonia, Serratia, Shigella, Shimwellia, Siccibacter, Sodalis, Tatumella, Thorsellia, Trabulsiella, Wigglesworthia, Xenorhabdus, Yersinia, Yokenella CIP R fluoroquinolones R Expert Rules on Enterobacterales Expert Rules 3.2 This is Enterobacterales except Salmonella spp.
fullname like ^(Serratia|Providencia|Morganella morganii) TGC R Expert Rules on Enterobacterales Expert Rules 3.2
genus is Salmonella cephalosporins_2nd R Expert Rules on Salmonella Expert Rules 3.2
genus is Salmonella aminoglycosides R Expert Rules on Salmonella Expert Rules 3.2
@ -415,3 +415,121 @@ fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter braakii|Citrobacte
fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter braakii|Citrobacter freundii|Citrobacter gillenii|Citrobacter murliniae|Citrobacter rodenticum|Citrobacter sedlakii|Citrobacter werkmanii|Citrobacter youngae|Hafnia alvei|Serratia|Morganella morganii|Providencia) CTX I CTX, CRO, CAZ Expert Rules on Enterobacterales (AmpC de-repressed cephalosporins) Expert Rules 3.2 This is rule 3 and 4 of EUCAST Expert Rules v3.2 on Enterobacterales, result will be set with the 'ampc_derepressed_cephalosporins' argument
fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter braakii|Citrobacter freundii|Citrobacter gillenii|Citrobacter murliniae|Citrobacter rodenticum|Citrobacter sedlakii|Citrobacter werkmanii|Citrobacter youngae|Hafnia alvei|Serratia|Morganella morganii|Providencia) CRO I CTX, CRO, CAZ Expert Rules on Enterobacterales (AmpC de-repressed cephalosporins) Expert Rules 3.2 This is rule 3 and 4 of EUCAST Expert Rules v3.2 on Enterobacterales, result will be set with the 'ampc_derepressed_cephalosporins' argument
fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter braakii|Citrobacter freundii|Citrobacter gillenii|Citrobacter murliniae|Citrobacter rodenticum|Citrobacter sedlakii|Citrobacter werkmanii|Citrobacter youngae|Hafnia alvei|Serratia|Morganella morganii|Providencia) CAZ I CTX, CRO, CAZ Expert Rules on Enterobacterales (AmpC de-repressed cephalosporins) Expert Rules 3.2 This is rule 3 and 4 of EUCAST Expert Rules v3.2 on Enterobacterales, result will be set with the 'ampc_derepressed_cephalosporins' argument
order is Enterobacterales PEN, glycopeptides_except_lipo, lipoglycopeptides, FUS, macrolides, lincosamides, streptogramins, RIF, oxazolidinones R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
fullname like ^Citrobacter (koseri|amalonaticus|sedlakii|farmeri|rodentium) aminopenicillins, TIC R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
fullname like ^Citrobacter (freundii|braakii|murliniae|werkmanii|youngae) aminopenicillins, AMC, SAM, CZO, CEP, LEX, CFR, FOX R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Enterobacter cloacae aminopenicillins, AMC, SAM, CZO, CEP, LEX, CFR, FOX R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Escherichia hermannii aminopenicillins, TIC R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Hafnia alvei aminopenicillins, AMC, polymyxins R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Klebsiella aerogenes aminopenicillins, AMC, SAM, CZO, CEP, LEX, CFR, FOX R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Klebsiella oxytoca aminopenicillins, TIC R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
fullname like ^Klebsiella( pneumoniae| quasipneumoniae| variicola)? aminopenicillins, TIC R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Leclercia adecarboxylata FOS R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Morganella morganii aminopenicillins, AMC, SAM, CZO, CEP, LEX, CFR, DOX, MNO, TCY, polymyxins, NIT R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Plesiomonas shigelloides aminopenicillins, AMC, SAM R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Proteus mirabilis DOX, MNO, TCY, TGC, polymyxins, NIT R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Proteus penneri aminopenicillins, CZO, CEP, LEX, CFR, CXM, DOX, MNO, TCY, TGC, polymyxins, NIT R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Proteus vulgaris aminopenicillins, CZO, CEP, LEX, CFR, CXM, DOX, MNO, TCY, TGC, polymyxins, NIT R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Providencia rettgeri aminopenicillins, AMC, SAM, CZO, CEP, LEX, CFR, DOX, MNO, TCY, polymyxins, NIT R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Providencia stuartii aminopenicillins, AMC, SAM, CZO, CEP, LEX, CFR, DOX, MNO, TCY, polymyxins, NIT R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus is Raoultella aminopenicillins, TIC R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Serratia marcescens aminopenicillins, AMC, SAM, CZO, CEP, LEX, CFR, FOX, CXM, DOX, TCY, polymyxins, NIT R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Yersinia enterocolitica aminopenicillins, AMC, SAM, TIC, CZO, CEP, LEX, CFR, FOX R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Yersinia pseudotuberculosis polymyxins R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Aeromonas hydrophila aminopenicillins, SAM R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Aeromonas veronii aminopenicillins, SAM, TIC R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Aeromonas dhakensis aminopenicillins, SAM, FOX R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus_species is Aeromonas caviae aminopenicillins, SAM R Table 1: Intrinsic resistance in Enterobacterales and Aeromonas spp. Expert Rules 3.3
genus one_of Achromobacter, Acinetobacter, Alcaligenes, Bordetella, Burkholderia, Elizabethkingia, Flavobacterium, Ochrobactrum, Pseudomonas, Stenotrophomonas PEN, cephalosporins_1st, cephalosporins_2nd, glycopeptides_except_lipo, lipoglycopeptides, FUS, macrolides, lincosamides, streptogramins, RIF, oxazolidinones R Table 2: Intrinsic resistance in non-fermentative gram-negative bacteria Expert Rules 3.3
fullname like ^Acinetobacter (baumannii|pittii|nosocomialis) aminopenicillins, AMC, CRO, CTX, ATM, ETP, TMP, FOS, DOX, TCY R Table 2: Intrinsic resistance in non-fermentative gram-negative bacteria Expert Rules 3.3 Additional rules from header added in separate rule (genus is one of…)
genus is Acinetobacter DOX, TCY R Table 2: Intrinsic resistance in non-fermentative gram-negative bacteria Expert Rules 3.3 Additional rules from header added in separate rule (genus is one of…)
genus_species is Achromobacter xylosoxidans aminopenicillins, CRO, CTX, ETP, ATM R Table 2: Intrinsic resistance in non-fermentative gram-negative bacteria Expert Rules 3.3 Additional rules from header added in separate rule (genus is one of…)
fullname like ^Burkholderia (ambifaria|anthina|arboris|cepacia|cenocepacia|contaminans|diffusa|dolosa|lata|latens|metallica|multivorans|paludis|pseudomultivorans|pyrrocinia|pseudomultivorans|seminalis|stabilis|stagnalis|territorii|ubonensis|vietnamiensis) aminopenicillins, AMC, SAM, TIC, TCC, PIP, TZP, CRO, CTX, ATM, ETP, CIP, CHL, aminoglycosides, TMP, FOS, polymyxins R Table 2: Intrinsic resistance in non-fermentative gram-negative bacteria Expert Rules 3.3 Additional rules from header added in separate rule (genus is one of…)
genus_species is Elizabethkingia meningoseptica aminopenicillins, AMC, SAM, TIC, TCC, CTX, CRO, CAZ, FEP, ATM, ETP, IPM, MEM, polymyxins R Table 2: Intrinsic resistance in non-fermentative gram-negative bacteria Expert Rules 3.3 Additional rules from header added in separate rule (genus is one of…)
genus_species is Elizabethkingia anophelis aminopenicillins, AMC, SAM, TIC, TCC, CTX, CRO, CAZ, FEP, ATM, ETP, IPM, MEM R Table 2: Intrinsic resistance in non-fermentative gram-negative bacteria Expert Rules 3.3 Additional rules from header added in separate rule (genus is one of…)
genus_species is Brucella anthropi aminopenicillins, AMC, SAM, TIC, TCC, PIP, TZP, CZO, CTX, CRO, CAZ, FEP, ATM, ETP R Table 2: Intrinsic resistance in non-fermentative gram-negative bacteria Expert Rules 3.3 Additional rules from header added in separate rule (genus is one of…)
genus_species is Pseudomonas aeruginosa aminopenicillins, AMC, SAM, CTX, CRO, ETP, CHL, KAN, NEO, TMP, DOX, MNO, TCY, TGC R Table 2: Intrinsic resistance in non-fermentative gram-negative bacteria Expert Rules 3.3 Additional rules from header added in separate rule (genus is one of…)
genus_species is Stenotrophomonas maltophilia aminopenicillins, AMC, SAM, TIC, PIP, TZP, CRO, CTX, ATM, ETP, IPM, MEM, aminoglycosides, TMP, FOS, TCY R Table 2: Intrinsic resistance in non-fermentative gram-negative bacteria Expert Rules 3.3 Additional rules from header added in separate rule (genus is one of…)
genus is Chryseobacterium aminopenicillins, AMC, SAM, TIC, TCC, CRO, CTX, CAZ, ATM, ETP, IPM, MEM, aminoglycosides, polymyxins R Table 2: Intrinsic resistance in non-fermentative gram-negative bacteria Expert Rules 3.3 Additional rules from header added in separate rule (genus is one of…)
genus_species is Haemophilus influenzae FUS, streptogramins, glycopeptides_except_lipo, lipoglycopeptides, lincosamides, oxazolidinones R Table 3: Intrinsic resistance in other gram-negative bacteria Expert Rules 3.3
genus_species is Moraxella catarrhalis TMP, glycopeptides_except_lipo, lipoglycopeptides, lincosamides, oxazolidinones R Table 3: Intrinsic resistance in other gram-negative bacteria Expert Rules 3.3
genus is Neisseria TMP, glycopeptides_except_lipo, lipoglycopeptides, lincosamides, oxazolidinones R Table 3: Intrinsic resistance in other gram-negative bacteria Expert Rules 3.3
genus_species is Campylobacter fetus FUS, streptogramins, TMP, NAL, glycopeptides_except_lipo, lipoglycopeptides, lincosamides, oxazolidinones R Table 3: Intrinsic resistance in other gram-negative bacteria Expert Rules 3.3
fullname like ^Campylobacter (jejuni|coli) FUS, streptogramins, TMP, glycopeptides_except_lipo, lipoglycopeptides, lincosamides, oxazolidinones R Table 3: Intrinsic resistance in other gram-negative bacteria Expert Rules 3.3
gramstain is Gram-positive ATM, TEM, polymyxins, NAL R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus_species is Staphylococcus saprophyticus FUS, CAZ, FOS, NOV R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus_species is Staphylococcus cohnii CAZ, NOV R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus_species is Staphylococcus xylosus CAZ, NOV R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus_species is Staphylococcus capitis CAZ, FOS R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus_species is Staphylococcus aureus CAZ R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus_species is Staphylococcus coagulase-negative CAZ R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus is Streptococcus FUS, CAZ, aminoglycosides R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus_species is Enterococcus faecalis FUS, CAZ, cephalosporins_except_CAZ, aminoglycosides, macrolides, CLI, QDA, SDI, SUD, SDM, SLF, SLF1, SLF2, SZO, SLF3, SLF4, SMX, SLF5, SLF6, SLF7, SLF8, SLF9, SLF10, SLF11, SLF12, SUT, SLF13 R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 These last ones are all true sulfonamides
genus_species is Enterococcus faecalis TMP S SXT, SLT1, SLT2, SLT3, SLT4, SLT5 S Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 Since R to sulfonamides - TMP result is equal with combinations
genus_species is Enterococcus faecalis TMP I SXT, SLT1, SLT2, SLT3, SLT4, SLT5 I Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 Since R to sulfonamides - TMP result is equal with combinations
genus_species is Enterococcus faecalis TMP R SXT, SLT1, SLT2, SLT3, SLT4, SLT5 R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 Since R to sulfonamides - TMP result is equal with combinations
fullname like ^Enterococcus (gallinarum|casseliflavus) FUS, CAZ, cephalosporins_except_CAZ, aminoglycosides, macrolides, CLI, QDA, VAN, SDI, SUD, SDM, SLF, SLF1, SLF2, SZO, SLF3, SLF4, SMX, SLF5, SLF6, SLF7, SLF8, SLF9, SLF10, SLF11, SLF12, SUT, SLF13 R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 These last ones are all true sulfonamides
fullname like ^Enterococcus (gallinarum|casseliflavus) TMP S SXT, SLT1, SLT2, SLT3, SLT4, SLT5 S Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 Since R to sulfonamides - TMP result is equal with combinations
fullname like ^Enterococcus (gallinarum|casseliflavus) TMP I SXT, SLT1, SLT2, SLT3, SLT4, SLT5 I Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 Since R to sulfonamides - TMP result is equal with combinations
fullname like ^Enterococcus (gallinarum|casseliflavus) TMP R SXT, SLT1, SLT2, SLT3, SLT4, SLT5 R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 Since R to sulfonamides - TMP result is equal with combinations
genus_species is Enterococcus faecium FUS, CAZ, cephalosporins_except_CAZ, aminoglycosides, macrolides, SDI, SUD, SDM, SLF, SLF1, SLF2, SZO, SLF3, SLF4, SMX, SLF5, SLF6, SLF7, SLF8, SLF9, SLF10, SLF11, SLF12, SUT, SLF13 R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 These last ones are all true sulfonamides
genus_species is Enterococcus faecium TMP S SXT, SLT1, SLT2, SLT3, SLT4, SLT5 S Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 Since R to sulfonamides - TMP result is equal with combinations
genus_species is Enterococcus faecium TMP I SXT, SLT1, SLT2, SLT3, SLT4, SLT5 I Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 Since R to sulfonamides - TMP result is equal with combinations
genus_species is Enterococcus faecium TMP R SXT, SLT1, SLT2, SLT3, SLT4, SLT5 R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3 Since R to sulfonamides - TMP result is equal with combinations
genus is Corynebacterium FOS R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus_species is Listeria monocytogenes CAZ, cephalosporins_except_CAZ R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus one_of Leuconostoc, Pediococcus VAN, TEC R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus is Lactobacillus VAN, TEC R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
fullname like ^Clostridium (ramosum|innocuum) VAN R Table 4: Intrinsic resistance in gram-positive bacteria Expert Rules 3.3
genus_species one_of Escherichia coli, Proteus mirabilis AMP R PIP R Expert Rules on Enterobacterales Expert Rules 3.3
genus_species one_of Escherichia coli, Proteus mirabilis AMP S PIP S Expert Rules on Enterobacterales Expert Rules 3.3
fullname like ^(Klebsiella(?! aerogenes)|Raoultella) PIP R Expert Rules on Enterobacterales Expert Rules 3.3
fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter freundii|Serratia|Morganella morganii|Hafnia alvei|Providencia) CXM S CXM, cephalosporins_2nd R Expert Rules on Enterobacterales Expert Rules 3.3
genus one_of Arsenophonus, Biostraticola, Brenneria, Buchnera, Budvicia, Buttiauxella, Cedecea, Citrobacter, Cosenzaea, Cronobacter, Dickeya, Edwardsiella, Enterobacillus, Enterobacter, Erwinia, Escherichia, Ewingella, Franconibacter, Gibbsiella, Hafnia, Izhakiella, Klebsiella, Kluyvera, Kosakonia, Leclercia, Lelliottia, Leminorella, Lonsdalea, Mangrovibacter, Mixta, Moellerella, Morganella, Obesumbacterium, Pantoea, Pectobacterium, Phaseolibacter, Photorhabdus, Phytobacter, Plesiomonas, Pluralibacter, Pragia, Proteus, Providencia, Pseudescherichia, Pseudocitrobacter, Rahnella, Raoultella, Rosenbergiella, Rouxiella, Saccharobacter, Samsonia, Serratia, Shigella, Shimwellia, Siccibacter, Sodalis, Tatumella, Thorsellia, Trabulsiella, Wigglesworthia, Xenorhabdus, Yersinia, Yokenella CIP R fluoroquinolones R Expert Rules on Enterobacterales Expert Rules 3.3 This is Enterobacterales except Salmonella spp.
fullname like ^(Serratia|Providencia|Morganella morganii) TGC R Expert Rules on Enterobacterales Expert Rules 3.3
genus is Salmonella cephalosporins_2nd R Expert Rules on Salmonella Expert Rules 3.3
genus is Salmonella aminoglycosides R Expert Rules on Salmonella Expert Rules 3.3
genus is Salmonella PEF R CIP R Expert Rules on Salmonella Expert Rules 3.3
genus_species is Staphylococcus aureus FOX1 R betalactams R Expert Rules on Staphylococcus Expert Rules 3.3
genus_species is Staphylococcus aureus FOX1 S betalactams S Expert Rules on Staphylococcus Expert Rules 3.3
genus_species one_of Staphylococcus aureus, Staphylococcus lugdunensis PEN R AMP, AMX, AZL, BAM, CRB, CRN, EPC, HET, MEC, MEZ, MTM, PIP, PME, PVM, SBC, TAL, TEM, TIC R Expert Rules on Staphylococcus Expert Rules 3.3 all penicillins without beta-lactamse inhibitor
genus is Staphylococcus ERY, CLI S macrolides, lincosamides S Expert Rules on Staphylococcus Expert Rules 3.3
genus is Staphylococcus NOR S CIP, LVX, MFX, OFX S Expert Rules on Staphylococcus Expert Rules 3.3
genus is Staphylococcus LVX R fluoroquinolones R Expert Rules on Staphylococcus Expert Rules 3.3
genus is Staphylococcus MFX R fluoroquinolones R Expert Rules on Staphylococcus Expert Rules 3.3
genus is Staphylococcus TCY S DOX, MNO, TGC S Expert Rules on Staphylococcus Expert Rules 3.3
genus is Staphylococcus TCY R DOX, MNO R Expert Rules on Staphylococcus Expert Rules 3.3
genus is Staphylococcus VAN S lipoglycopeptides S Expert Rules on Staphylococcus Expert Rules 3.3
genus is Staphylococcus LNZ S TZD S Expert Rules on Staphylococcus Expert Rules 3.3
fullname like ^Enterococcus (faecalis|faecium) AMP R ureidopenicillins, IPM R Expert Rules on Enterococcus Expert Rules 3.3
fullname like ^Enterococcus (faecalis|faecium) AMX R ureidopenicillins, IPM R Expert Rules on Enterococcus Expert Rules 3.3
genus is Enterococcus NOR S CIP, LVX S Expert Rules on Enterococcus Expert Rules 3.3
genus is Enterococcus VAN S lipoglycopeptides S Expert Rules on Enterococcus Expert Rules 3.3
genus_species is Enterococcus faecium CLI R Expert Rules on Enterococcus Expert Rules 3.3
genus_species one_of Streptococcus group A, Streptococcus group B, Streptococcus group C, Streptococcus group G PEN S aminopenicillins, cephalosporins, carbapenems S Expert Rules on Streptococcus A, B, C and G Expert Rules 3.3
genus_species one_of Streptococcus group A, Streptococcus group B, Streptococcus group C, Streptococcus group G NOR S LVX, MFX S Expert Rules on Streptococcus A, B, C and G Expert Rules 3.3
genus_species one_of Streptococcus group A, Streptococcus group B, Streptococcus group C, Streptococcus group G NOR R LVX, MFX R Expert Rules on Streptococcus A, B, C and G Expert Rules 3.3
genus_species is Streptococcus pneumoniae OXA S PHN, PEN, aminopenicillins, cephalosporins_except_CAZ, carbapenems S Expert Rules on Streptococcus pneumoniae Expert Rules 3.3
genus_species is Streptococcus pneumoniae NOR S LVX, MFX S Expert Rules on Streptococcus pneumoniae Expert Rules 3.3
genus_species is Streptococcus pneumoniae NOR R LVX, MFX R Expert Rules on Streptococcus pneumoniae Expert Rules 3.3
genus_species is Streptococcus pneumoniae LVX R fluoroquinolones R Expert Rules on Streptococcus pneumoniae Expert Rules 3.3
genus_species is Streptococcus pneumoniae MFX R fluoroquinolones R Expert Rules on Streptococcus pneumoniae Expert Rules 3.3
genus_species is Streptococcus pneumoniae TCY S DOX, MNO S Expert Rules on Streptococcus pneumoniae Expert Rules 3.3
genus_species is Streptococcus pneumoniae TCY R DOX, MNO R Expert Rules on Streptococcus pneumoniae Expert Rules 3.3
genus_species is Streptococcus pneumoniae VAN S lipoglycopeptides S Expert Rules on Streptococcus pneumoniae Expert Rules 3.3
fullname like ^Streptococcus (anginosus|australis|bovis|constellatus|cristatus|equinus|gallolyticus|gordonii|infantarius|infantis|intermedius|mitis|mutans|oligofermentans|oralis|parasanguinis|peroris|pseudopneumoniae|salivarius|sanguinis|sinensis|sobrinus|thermophilus|vestibularis|viridans)$ PEN S aminopenicillins, CTX, CRO S Expert Rules on Viridans Group Streptococci Expert Rules 3.3
genus_species is Haemophilus influenzae PEN S betalactams S Expert Rules on Haemophilus influenzae Expert Rules 3.3
genus_species is Haemophilus influenzae NAL S fluoroquinolones S Expert Rules on Haemophilus influenzae Expert Rules 3.3
genus_species is Haemophilus influenzae NAL R CIP, LVX, MFX R Expert Rules on Haemophilus influenzae Expert Rules 3.3
genus_species is Haemophilus influenzae TCY S DOX, MNO S Expert Rules on Haemophilus influenzae Expert Rules 3.3
genus_species is Haemophilus influenzae TCY R DOX, MNO R Expert Rules on Haemophilus influenzae Expert Rules 3.3
genus_species is Moraxella catarrhalis NAL S fluoroquinolones S Expert Rules on Moraxella catarrhalis Expert Rules 3.3
genus_species is Moraxella catarrhalis NAL R fluoroquinolones R Expert Rules on Moraxella catarrhalis Expert Rules 3.3
genus is Campylobacter ERY S CLR, AZM S Expert Rules on Campylobacter Expert Rules 3.3
genus_species is Campylobacter ERY R CLR, AZM R Expert Rules on Campylobacter Expert Rules 3.3
fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter braakii|Citrobacter freundii|Citrobacter gillenii|Citrobacter murliniae|Citrobacter rodenticum|Citrobacter sedlakii|Citrobacter werkmanii|Citrobacter youngae|Hafnia alvei|Serratia|Morganella morganii|Providencia) CTX S CTX, CRO, CAZ Expert Rules on Enterobacterales (AmpC de-repressed cephalosporins) Expert Rules 3.3 This is rule 3 and 4 of EUCAST Expert Rules v3.2 on Enterobacterales, result will be set with the 'ampc_derepressed_cephalosporins' argument
fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter braakii|Citrobacter freundii|Citrobacter gillenii|Citrobacter murliniae|Citrobacter rodenticum|Citrobacter sedlakii|Citrobacter werkmanii|Citrobacter youngae|Hafnia alvei|Serratia|Morganella morganii|Providencia) CRO S CTX, CRO, CAZ Expert Rules on Enterobacterales (AmpC de-repressed cephalosporins) Expert Rules 3.3 This is rule 3 and 4 of EUCAST Expert Rules v3.2 on Enterobacterales, result will be set with the 'ampc_derepressed_cephalosporins' argument
fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter braakii|Citrobacter freundii|Citrobacter gillenii|Citrobacter murliniae|Citrobacter rodenticum|Citrobacter sedlakii|Citrobacter werkmanii|Citrobacter youngae|Hafnia alvei|Serratia|Morganella morganii|Providencia) CAZ S CTX, CRO, CAZ Expert Rules on Enterobacterales (AmpC de-repressed cephalosporins) Expert Rules 3.3 This is rule 3 and 4 of EUCAST Expert Rules v3.2 on Enterobacterales, result will be set with the 'ampc_derepressed_cephalosporins' argument
fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter braakii|Citrobacter freundii|Citrobacter gillenii|Citrobacter murliniae|Citrobacter rodenticum|Citrobacter sedlakii|Citrobacter werkmanii|Citrobacter youngae|Hafnia alvei|Serratia|Morganella morganii|Providencia) CTX I CTX, CRO, CAZ Expert Rules on Enterobacterales (AmpC de-repressed cephalosporins) Expert Rules 3.3 This is rule 3 and 4 of EUCAST Expert Rules v3.2 on Enterobacterales, result will be set with the 'ampc_derepressed_cephalosporins' argument
fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter braakii|Citrobacter freundii|Citrobacter gillenii|Citrobacter murliniae|Citrobacter rodenticum|Citrobacter sedlakii|Citrobacter werkmanii|Citrobacter youngae|Hafnia alvei|Serratia|Morganella morganii|Providencia) CRO I CTX, CRO, CAZ Expert Rules on Enterobacterales (AmpC de-repressed cephalosporins) Expert Rules 3.3 This is rule 3 and 4 of EUCAST Expert Rules v3.2 on Enterobacterales, result will be set with the 'ampc_derepressed_cephalosporins' argument
fullname like ^(Enterobacter|Klebsiella aerogenes|Citrobacter braakii|Citrobacter freundii|Citrobacter gillenii|Citrobacter murliniae|Citrobacter rodenticum|Citrobacter sedlakii|Citrobacter werkmanii|Citrobacter youngae|Hafnia alvei|Serratia|Morganella morganii|Providencia) CAZ I CTX, CRO, CAZ Expert Rules on Enterobacterales (AmpC de-repressed cephalosporins) Expert Rules 3.3 This is rule 3 and 4 of EUCAST Expert Rules v3.2 on Enterobacterales, result will be set with the 'ampc_derepressed_cephalosporins' argument

Can't render this file because it contains an unexpected character in line 6 and column 96.

13
data-raw/ex2.R Normal file
View File

@ -0,0 +1,13 @@
ex2 <- example_isolates
for (extra_id in seq_len(50)) {
ex2 <- ex2 %>%
bind_rows(example_isolates %>% mutate(patient_id = paste0(patient_id, extra_id)))
}
# randomly clear antibibiograms of 2%
clr <- sort(sample(x = seq_len(nrow(ex2)),
size = nrow(ex2) * 0.02))
for (row in which(is.rsi(ex2))) {
ex2[clr, row] <- NA_rsi_
}

BIN
data-raw/ex2.rds Normal file

Binary file not shown.

1
data-raw/intrinsicR.md5 Normal file
View File

@ -0,0 +1 @@
56b3cea0e28d8a54e0fcbd3e50af96fc

Binary file not shown.

View File

@ -1 +1 @@
9c58b2d894dbad7593cd44b78d04cd78
d4e080899f438bc1eacb8ec9cfa117b8

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

6882
data-raw/logo.svg Executable file → Normal file

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 222 KiB

After

Width:  |  Height:  |  Size: 164 KiB

View File

@ -6,7 +6,7 @@
# https://github.com/msberends/AMR #
# #
# LICENCE #
# (c) 2018-2021 Berends MS, Luz CF et al. #
# (c) 2018-2022 Berends MS, Luz CF et al. #
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
8338ff5f079f4519fa3c44f8c5bace64
ee4434541c7b6529b391d2684748e28b

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More