From 0293d296aa24d81208182465e8e4fea5f7e1076b Mon Sep 17 00:00:00 2001 From: Matthijs Berends Date: Mon, 12 Oct 2026 11:42:06 +0200 Subject: [PATCH] (v3.0.1.9121) styler --- DESCRIPTION | 2 +- NEWS.md | 2 +- R/amr_selectors.R | 16 +- R/antibiogram.R | 3 +- R/sysdata.rda | Bin 181792 -> 181940 bytes ...roduction_of_clinical_breakpoints_eucast.R | 832 +++++++++++------- .../reproduction_of_intrinsic_resistant.R | 18 +- .../reproduction_of_microorganisms.R | 260 +++--- .../run_after_microorganisms_build.R | 14 +- data-raw/wisca_test/parameters_amr.R | 746 ++++++++-------- data-raw/wisca_test/wisca_AMR.R | 250 +++--- index.md | 22 +- man/antibiogram.Rd | 3 +- man/antimicrobial_selectors.Rd | 16 +- 14 files changed, 1191 insertions(+), 993 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index d635516f1..a54a14cbb 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: AMR -Version: 3.0.1.9120 +Version: 3.0.1.9121 Date: 2026-10-12 Title: Antimicrobial Resistance Data Analysis Description: Functions to simplify and standardise antimicrobial resistance (AMR) diff --git a/NEWS.md b/NEWS.md index 932f03b2b..31c9950e4 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# AMR 3.0.1.9120 +# AMR 3.0.1.9121 Planned as v3.1.0, mid October 2026. diff --git a/R/amr_selectors.R b/R/amr_selectors.R index ba65eb3cd..2c6458025 100755 --- a/R/amr_selectors.R +++ b/R/amr_selectors.R @@ -73,7 +73,6 @@ #' # Though they are primarily intended to use for selections and filters. #' # Examples sections below are split into 'dplyr', 'base R', and 'data.table': #' -#' \donttest{ #' \dontrun{ #' # dplyr ------------------------------------------------------------------- #' @@ -94,8 +93,10 @@ #' # get AMR for all aminoglycosides e.g., per ward: #' example_isolates %>% #' group_by(ward) %>% -#' summarise(across(aminoglycosides(), -#' resistance)) +#' summarise(across( +#' aminoglycosides(), +#' resistance +#' )) #' #' # You can combine selectors with '&' to be more specific: #' example_isolates %>% @@ -105,8 +106,10 @@ #' example_isolates %>% #' filter(mo_genus() %in% c("Escherichia", "Klebsiella")) %>% #' group_by(ward) %>% -#' summarise_at(not_intrinsic_resistant(), -#' resistance) +#' summarise_at( +#' not_intrinsic_resistant(), +#' resistance +#' ) #' #' # get susceptibility for antimicrobials whose name contains "trim": #' example_isolates %>% @@ -159,8 +162,9 @@ #' y <- example_isolates %>% filter(carbapenems() == "R") #' z <- example_isolates %>% filter(if_all(carbapenems(), ~ .x == "R")) #' identical(x, y) && identical(y, z) -#' #' } +#' +#' \donttest{ #' # base R ------------------------------------------------------------------ #' #' # select columns 'IPM' (imipenem) and 'MEM' (meropenem) diff --git a/R/antibiogram.R b/R/antibiogram.R index bfe97c2c8..415ba1ab9 100755 --- a/R/antibiogram.R +++ b/R/antibiogram.R @@ -207,7 +207,8 @@ #' top_n_microorganisms(n = 10) %>% #' group_by( #' age_group = age_groups(age, c(25, 50, 75)), -#' gender) %>% +#' gender +#' ) %>% #' wisca(antimicrobials = c("TZP", "TZP+TOB", "TZP+GEN")) #' } #' diff --git a/R/sysdata.rda b/R/sysdata.rda index 887ffd2523e0b3a248478a98f5424205081039bd..b9745cc6b076b357b801d7b26895eb0e0a2bf28f 100755 GIT binary patch delta 159064 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 delta 158915 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 filter(!is.na(base_text) | !is.na(note_super) | !is.na(full_text)) |> select(row, col, base_text, note_super, full_text) @@ -171,12 +174,12 @@ split_agent_organism <- function(cells, formats, sheet_name, valid_rows) { } base_bold <- formats$local$font$bold[col_a$local_format_id] base_strike <- coalesce(formats$local$font$strike[col_a$local_format_id], FALSE) - + out <- vector("list", nrow(col_a)) for (i in seq_len(nrow(col_a))) { fmt <- col_a$character_formatted[[i]] row_i <- col_a$row[i] - + if (is.null(fmt) || nrow(fmt) == 0) { # Plain (non-rich-text) cell: nothing to split, whole text is the agent # name, unless the whole cell is struck through @@ -185,19 +188,19 @@ split_agent_organism <- function(cells, formats, sheet_name, valid_rows) { } next } - + # Drop struck-through and superscript runs first, exactly as split_rich_text() does is_struck <- coalesce(fmt$strike, base_strike[i]) fmt <- fmt[!is_struck, , drop = FALSE] is_super <- !is.na(fmt$vertAlign) & fmt$vertAlign == "superscript" fmt <- fmt[!is_super, , drop = FALSE] - + if (nrow(fmt) <= 1) { txt <- if (nrow(fmt) == 1) fmt$character[1] else col_a$character[i] out[[i]] <- tibble(row = row_i, ab_text = txt, mo_override = NA_character_) next } - + bold_resolved <- ifelse(is.na(fmt$bold), base_bold[i], fmt$bold) # An indication qualifier may also follow the organism restriction as a @@ -209,7 +212,7 @@ split_agent_organism <- function(cells, formats, sheet_name, valid_rows) { trailing_qualifier <- NA_character_ n <- length(bold_resolved) if (n > 2 && bold_resolved[n] && !bold_resolved[n - 1] && - grepl("^\\s*\\([^()]+\\)\\s*$", fmt$character[n])) { + grepl("^\\s*\\([^()]+\\)\\s*$", fmt$character[n])) { trailing_qualifier <- trimws(fmt$character[n]) fmt <- fmt[-n, , drop = FALSE] bold_resolved <- bold_resolved[-n] @@ -223,17 +226,23 @@ split_agent_organism <- function(cells, formats, sheet_name, valid_rows) { break } } - + if (is.na(split_at)) { # Either the whole cell is bold (no restriction present -> fine, keep # as a single agent name) or the bold pattern never settles into an # all-non-bold tail, which is the genuinely unexpected case. if (all(bold_resolved) || !any(bold_resolved)) { - out[[i]] <- tibble(row = row_i, - ab_text = paste(c(paste0(fmt$character, collapse = ""), - trailing_qualifier[!is.na(trailing_qualifier)]), - collapse = " "), - mo_override = NA_character_) + out[[i]] <- tibble( + row = row_i, + ab_text = paste( + c( + paste0(fmt$character, collapse = ""), + trailing_qualifier[!is.na(trailing_qualifier)] + ), + collapse = " " + ), + mo_override = NA_character_ + ) next } stop( @@ -244,7 +253,7 @@ split_agent_organism <- function(cells, formats, sheet_name, valid_rows) { "trailing organism restriction is not; inspect this cell manually." ) } - + ab_text <- paste0(fmt$character[seq_len(split_at)], collapse = "") if (!is.na(trailing_qualifier)) { ab_text <- paste(gsub(",\\s*$", "", trimws(ab_text)), trailing_qualifier) @@ -252,7 +261,7 @@ split_agent_organism <- function(cells, formats, sheet_name, valid_rows) { mo_override <- paste0(fmt$character[(split_at + 1):n], collapse = "") out[[i]] <- tibble(row = row_i, ab_text = ab_text, mo_override = mo_override) } - + bind_rows(out) |> mutate( ab_text = trimws(gsub("[\r\n]+", " ", ab_text)), @@ -281,23 +290,30 @@ split_agent_organism <- function(cells, formats, sheet_name, valid_rows) { # 2. Notes block parser # ============================================================================== parse_notes_block <- function(txt) { - if (is.na(txt) || txt == "") return(list()) - + if (is.na(txt) || txt == "") { + return(list()) + } + txt <- gsub("\r\n", "\n", txt) txt <- gsub("\r", "\n", txt) txt <- gsub("\u00A0", " ", txt) - + find_keys <- function(pattern, txt) { m <- gregexpr(pattern, txt, perl = TRUE)[[1]] - if (m[1] == -1) - return(data.frame(pos = integer(0), key = character(0), - mlen = integer(0), stringsAsFactors = FALSE)) + if (m[1] == -1) { + return(data.frame( + pos = integer(0), key = character(0), + mlen = integer(0), stringsAsFactors = FALSE + )) + } lens <- attr(m, "match.length") keys <- gsub("[.\\s]+$", "", trimws(substring(txt, m, m + lens - 1)), perl = TRUE) - data.frame(pos = as.integer(m), key = keys, mlen = as.integer(lens), - stringsAsFactors = FALSE) + data.frame( + pos = as.integer(m), key = keys, mlen = as.integer(lens), + stringsAsFactors = FALSE + ) } - + # A note key only starts at the beginning of a line or directly after the # end of a sentence, since EUCAST does not always put each note on its own # line (e.g. "...meropenem only. 3.The addition of..." or "...urinary @@ -320,9 +336,11 @@ parse_notes_block <- function(txt) { # Numbered without dot at the start of a line (e.g. C. difficile sheet): # digit, space, uppercase letter r4 <- find_keys("(?:^|(?<=\\n))[ \\t]*\\d+[ \\t]+(?=[A-Z])", txt) - + all_keys <- rbind(r1, r2, r3, r4) - if (nrow(all_keys) == 0) return(list()) + if (nrow(all_keys) == 0) { + return(list()) + } # At the same position, keep the longest (most specific) match, e.g. "1/A." # over "1.", and drop any match that starts within an earlier kept match all_keys <- all_keys[order(all_keys$pos, -all_keys$mlen), ] @@ -333,7 +351,7 @@ parse_notes_block <- function(txt) { keep[seq_len(nrow(all_keys)) > i & all_keys$pos < all_keys$pos[i] + all_keys$mlen[i]] <- FALSE } all_keys <- all_keys[keep, ] - + notes <- list() for (i in seq_len(nrow(all_keys))) { body_start <- all_keys$pos[i] + all_keys$mlen[i] @@ -344,12 +362,16 @@ parse_notes_block <- function(txt) { # reference "A" individually for (k in unique(c(key, if (grepl("/", key)) strsplit(key, "/")[[1]]))) { if (!nzchar(body)) { - stop("parse_notes_block(): note key '", key, "' has an empty body, which means a ", - "cross-reference or other text was taken for a key. Text: '", substr(txt, 1, 300), "'") + stop( + "parse_notes_block(): note key '", key, "' has an empty body, which means a ", + "cross-reference or other text was taken for a key. Text: '", substr(txt, 1, 300), "'" + ) } if (!is.null(notes[[k]]) && !identical(notes[[k]], body)) { - stop("parse_notes_block(): note key '", k, "' occurs more than once with different ", - "bodies. Text: '", substr(txt, 1, 300), "'") + stop( + "parse_notes_block(): note key '", k, "' occurs more than once with different ", + "bodies. Text: '", substr(txt, 1, 300), "'" + ) } notes[[k]] <- body } @@ -366,13 +388,17 @@ resolve_notes <- function(notes_list, mic_super, disk_super, abbreviations = lis # Staphylococcus) or "1" with superscript "4.5" (v16.1, H. influenzae) mic_refs <- character(0) disk_refs <- character(0) - if (!is.na(mic_super) && mic_super != "") + if (!is.na(mic_super) && mic_super != "") { mic_refs <- trimws(unlist(strsplit(mic_super, "[,.[:space:]]+"))) - if (!is.na(disk_super) && disk_super != "") + } + if (!is.na(disk_super) && disk_super != "") { disk_refs <- trimws(unlist(strsplit(disk_super, "[,.[:space:]]+"))) + } all_refs <- unique(c(mic_refs, disk_refs)) all_refs <- all_refs[nzchar(all_refs)] - if (length(all_refs) == 0) return(NA_character_) + if (length(all_refs) == 0) { + return(NA_character_) + } # A reference that is not a key of the table's own notes block can be an # abbreviation from the workbook's general "Notes" sheet, e.g. superscript @@ -383,16 +409,18 @@ resolve_notes <- function(notes_list, mic_super, disk_super, abbreviations = lis nl <- c(nl, abbreviations[from_abbr]) unresolved <- setdiff(all_refs, names(nl)) if (length(unresolved) > 0) { - stop("resolve_notes(): note reference(s) '", paste(unresolved, collapse = "', '"), - "' not found in the notes block (keys found: ", paste(names(notes_list), collapse = " "), - ") nor in the workbook abbreviations (", paste(names(abbreviations), collapse = " "), ")") + stop( + "resolve_notes(): note reference(s) '", paste(unresolved, collapse = "', '"), + "' not found in the notes block (keys found: ", paste(names(notes_list), collapse = " "), + ") nor in the workbook abbreviations (", paste(names(abbreviations), collapse = " "), ")" + ) } - + # Detect combined keys (e.g. "1/A") combined_keys <- grep("/", names(nl), value = TRUE) used_combined <- character(0) consumed_refs <- character(0) - + for (ck in combined_keys) { parts <- unlist(strsplit(ck, "/")) if (all(parts %in% all_refs)) { @@ -400,12 +428,12 @@ resolve_notes <- function(notes_list, mic_super, disk_super, abbreviations = lis consumed_refs <- c(consumed_refs, parts) } } - + remaining_refs <- setdiff(all_refs, consumed_refs) - + parts_out <- character(0) bodies_seen <- character(0) - + # Combined notes for (ck in used_combined) { bodies <- nl[[ck]] @@ -418,7 +446,7 @@ resolve_notes <- function(notes_list, mic_super, disk_super, abbreviations = lis } } } - + # Remaining individual notes: prefer duplicated over missing for (ref in remaining_refs) { if (!is.null(nl[[ref]])) { @@ -431,8 +459,10 @@ resolve_notes <- function(notes_list, mic_super, disk_super, abbreviations = lis } } } - - if (length(parts_out) == 0) return(NA_character_) + + if (length(parts_out) == 0) { + return(NA_character_) + } paste(parts_out, collapse = " | ") } @@ -441,7 +471,9 @@ resolve_notes <- function(notes_list, mic_super, disk_super, abbreviations = lis # ============================================================================== get_cell <- function(df, r, c) { hit <- df[df$row == r & df$col == c, ] - if (nrow(hit) == 0) return(list(base = NA_character_, super = NA_character_)) + if (nrow(hit) == 0) { + return(list(base = NA_character_, super = NA_character_)) + } base <- hit$base_text[1] super <- hit$note_super[1] # EUCAST occasionally omits the superscript formatting of a note reference @@ -456,7 +488,9 @@ get_cell <- function(df, r, c) { } parse_bp <- function(txt) { - if (is.na(txt) || txt == "") return(NA_character_) + if (is.na(txt) || txt == "") { + return(NA_character_) + } t <- trimws(txt) # placeholders such as "-" (susceptibility testing not recommended), "IE" # or "Note" are kept as they are: the cleanup turns them into blocking rows @@ -485,14 +519,20 @@ is_bracketed_bp <- function(txt) { # marks screening tests in the agent name instead, e.g. "Cefoxitin # (screen only)". The definition is read per workbook by # parse_workbook_notes() and added to the note of every bracketed row. - if (is.na(txt) || txt == "") return(FALSE) + if (is.na(txt) || txt == "") { + return(FALSE) + } grepl("^\\(.+\\)$", trimws(txt)) } format_disk_dose <- function(dose) { - if (is.na(dose) || dose == "") return(NA_character_) + if (is.na(dose) || dose == "") { + return(NA_character_) + } d <- trimws(dose) - if (grepl("mcg|unit", d, ignore.case = TRUE)) return(d) + if (grepl("mcg|unit", d, ignore.case = TRUE)) { + return(d) + } d <- gsub("-", "/", d) paste0(d, " mcg") } @@ -514,12 +554,14 @@ detect_version <- function(cells) { filter(row == 1, !is_blank, col > 1) |> mutate(text = coalesce(character, "")) version_text <- paste(version_cells$text, collapse = " ") - - version <- regmatches(version_text, - regexpr("v\\.?\\s*[\\d.]+", version_text, perl = TRUE)) + + version <- regmatches( + version_text, + regexpr("v\\.?\\s*[\\d.]+", version_text, perl = TRUE) + ) version <- gsub("v\\.?\\s*", "", version) if (length(version) == 0) version <- NA_character_ - + # The guideline year is read directly from the "valid from YYYY-MM-DD" # date in the version string, not derived from the version number: the # two are not reliably related. EUCAST's bacterial clinical breakpoint @@ -539,7 +581,7 @@ detect_version <- function(cells) { year <- regmatches(version_text, regexpr("\\d{4}", version_text)) } guideline <- if (length(year) == 1) paste0("EUCAST ", year) else NA_character_ - + # A human-readable description of the source file/table, for ref_tbl, # e.g. "Clinical Breakpoint Tables v. 16.1" or "Antifungal Clinical # Breakpoint Table v. 12.1" -- everything in the version string between @@ -547,7 +589,7 @@ detect_version <- function(cells) { file_desc <- sub("^EUCAST\\s+", "", version_text) file_desc <- trimws(sub(",?\\s*valid from.*$", "", file_desc, ignore.case = TRUE)) if (!nzchar(file_desc)) file_desc <- NA_character_ - + list(version = version, guideline = guideline, file_desc = file_desc) } @@ -556,15 +598,15 @@ detect_version <- function(cells) { # ============================================================================== parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { cells <- xlsx_cells(xlsx_path, sheets = sheet_name) - + # --- Detect version --- ver <- detect_version(cells) - + formats <- xlsx_formats(xlsx_path) - + # --- Parse rich text for cols A:I --- parsed <- parse_cells(cells |> filter(col >= 1, col <= 9), formats) - + # --- Statements extending MIC breakpoints to another species --- # The H. influenzae sheet states (v9.0-v16.1): "In the absence of specific # breakpoints, the H. influenzae MIC breakpoints can be applied to H. @@ -586,21 +628,25 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { } parse_log$mic_scope_extensions <- rbind( parse_log$mic_scope_extensions, - data.frame(guideline = ver$guideline, sheet = sheet_name, - from_text = paste(genus, m[3]), to_text = paste(genus, m[5]), statement = m[1]) + data.frame( + guideline = ver$guideline, sheet = sheet_name, + from_text = paste(genus, m[3]), to_text = paste(genus, m[5]), statement = m[1] + ) ) } else if (grepl("breakpoints can (also )?be applied to [A-Z]\\.", txt_squished)) { - stop("parse_sheet(): unrecognised statement about applying breakpoints to another species on sheet '", - sheet_name, "': ", substr(txt_squished, 1, 300)) + stop( + "parse_sheet(): unrecognised statement about applying breakpoints to another species on sheet '", + sheet_name, "': ", substr(txt_squished, 1, 300) + ) } } - + # --- Detect header rows (col 2 contains "MIC breakpoint") --- header_rows <- parsed |> filter(col == 2, grepl("MIC breakpoint", base_text, fixed = TRUE)) |> pull(row) |> sort() - + if (length(header_rows) == 0) { # Only acceptable when EUCAST states on the sheet itself that it has not # determined breakpoints, e.g. "EUCAST has not determined breakpoints for @@ -613,9 +659,11 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { if (length(no_bp_statement) > 0) { parse_log$no_breakpoints_determined <- rbind( parse_log$no_breakpoints_determined, - data.frame(guideline = ver$guideline, sheet = sheet_name, - organism = trimws(get_cell(parsed, 1, 1)$base), - statement = gsub("\\s+", " ", trimws(no_bp_statement[1]))) + data.frame( + guideline = ver$guideline, sheet = sheet_name, + organism = trimws(get_cell(parsed, 1, 1)$base), + statement = gsub("\\s+", " ", trimws(no_bp_statement[1])) + ) ) message(" EUCAST has not determined breakpoints in sheet '", sheet_name, "', skipping") return(NULL) @@ -631,10 +679,10 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { } stop("parse_sheet(): no 'MIC breakpoint' header row found in sheet '", sheet_name, "'") } - + # Sub-header rows: one row below each header (contains "S " pattern) sub_header_rows <- header_rows + 1 - + # --- Detect the notes column --- # On sheets that report both MIC and disk breakpoints, columns are laid out # as: A agent | B-D MIC (S/R/ATU) | E-H disk (dose/S/R/ATU) | I notes. @@ -648,20 +696,20 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { header_row_cols <- parsed |> filter(row %in% header_rows, col > 3, grepl("^Notes", base_text)) |> pull(col) - + notes_col <- if (length(header_row_cols) > 0) { # Normally consistent across header rows within a sheet; take the modal # (most frequent) value defensively in case of stray formatting cells. as.integer(names(sort(table(header_row_cols), decreasing = TRUE))[1]) } else { - 9L # fallback to the conventional position if no "Notes" label is found + 9L # fallback to the conventional position if no "Notes" label is found } - + # Data columns run up to (but excluding) the notes column; disk columns # are only present when notes_col > 5 (i.e. the sheet is wider than a # MIC-only layout of A:E). has_disk_columns <- notes_col > 5 - + # --- Detect sheet type: single-organism vs multi-organism --- # Multi-organism: col A at header rows contains "Antimicrobial agent". # This label alone is not sufficient, though: some genuinely single- @@ -675,33 +723,39 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { header_col_a <- parsed |> filter(row %in% header_rows, col == 1) |> pull(base_text) - + is_multi_organism <- length(header_rows) > 1 && all(grepl("Antimicrobial agent", header_col_a, fixed = TRUE)) - + # --- Detect organisms and their table ranges --- max_data_row <- max(parsed$row) - + if (is_multi_organism) { # Multi-organism: discover organism names above each header row. # Organism name is a standalone row (col A only, no data in B:H) # found between the previous table's end and this header row. - rows_with_b <- parsed |> filter(col == 2) |> pull(row) - + rows_with_b <- parsed |> + filter(col == 2) |> + pull(row) + tables <- list() for (i in seq_along(header_rows)) { hr <- header_rows[i] shr <- sub_header_rows[i] - + # Search backwards from the header row for the organism name search_from <- if (i == 1) 1 else sub_header_rows[i - 1] + 1 candidates <- parsed |> - filter(col == 1, row >= search_from, row < hr, - !row %in% rows_with_b) |> + filter( + col == 1, row >= search_from, row < hr, + !row %in% rows_with_b + ) |> # Exclude known non-organism text patterns - filter(!grepl("Antimicrobial|MIC determination|Disk diffusion|Breakpoints for|Expert Rules|For abbreviations|For species|Examples of|haze|Isolated|Ignore haemolysis|Numbered|Lettered|Medium:|Inoculum:|Incubation:|Reading:|Quality control:|See disk", - base_text)) - + filter(!grepl( + "Antimicrobial|MIC determination|Disk diffusion|Breakpoints for|Expert Rules|For abbreviations|For species|Examples of|haze|Isolated|Ignore haemolysis|Numbered|Lettered|Medium:|Inoculum:|Incubation:|Reading:|Quality control:|See disk", + base_text + )) + # Take the last candidate (closest to the header) if (nrow(candidates) > 0) { org_row <- candidates |> slice_max(row, n = 1) @@ -710,7 +764,7 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { # Fallback: use sheet name organism <- sheet_name } - + # Data range: from sub_header + 1 to the row before the next organism # or end of data first_data <- shr + 1 @@ -731,15 +785,18 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { last_data <- last_data - 1 } } - + # Notes cell: notes_col, in the data range (usually at first_data, merged) - note_cell <- parsed |> filter(col == notes_col, row >= first_data, row <= last_data) |> + note_cell <- parsed |> + filter(col == notes_col, row >= first_data, row <= last_data) |> slice_min(row, n = 1) note_text <- if (nrow(note_cell) > 0) note_cell$full_text[1] else NA_character_ notes_parsed <- parse_notes_block(note_text) - - tables[[i]] <- list(organism = organism, first_data = first_data, - last_data = last_data, notes = notes_parsed) + + tables[[i]] <- list( + organism = organism, first_data = first_data, + last_data = last_data, notes = notes_parsed + ) } } else { # Single-organism: organism name from row 1, col A @@ -747,7 +804,7 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { organism <- if (nrow(org_cell) > 0) org_cell$base_text[1] else sheet_name # Clean: remove trailing * or whitespace organism <- gsub("[*]+$", "", trimws(organism)) - + # Notes: notes_col, within each class section # For single-organism sheets, there is one notes block per class. # Notes cell is at the header row or first data row of each class. @@ -756,7 +813,7 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { hr <- header_rows[i] shr <- sub_header_rows[i] first_data <- shr + 1 - + if (i < length(header_rows)) { last_data <- header_rows[i + 1] - 1 while (last_data >= first_data) { @@ -772,23 +829,27 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { last_data <- last_data - 1 } } - + # Notes: look in notes_col from header row through end of section note_cells <- parsed |> - filter(col == notes_col, row >= hr, row <= last_data, - !grepl("^Notes", base_text)) + filter( + col == notes_col, row >= hr, row <= last_data, + !grepl("^Notes", base_text) + ) note_text <- if (nrow(note_cells) > 0) { paste(note_cells$full_text, collapse = "\n") } else { NA_character_ } notes_parsed <- parse_notes_block(note_text) - - tables[[i]] <- list(organism = organism, first_data = first_data, - last_data = last_data, notes = notes_parsed) + + tables[[i]] <- list( + organism = organism, first_data = first_data, + last_data = last_data, notes = notes_parsed + ) } } - + # --- Extract breakpoint rows --- # Split agent name from any organism restriction in column A (see # split_agent_organism() for the formatting-based rationale). This is @@ -800,16 +861,16 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { # "unexpected format" error at all. data_rows <- unique(unlist(map(tables, function(tbl) tbl$first_data:tbl$last_data))) agent_org_split <- split_agent_organism(cells, formats, sheet_name, valid_rows = data_rows) - + results <- vector("list", 500) idx <- 0L - + for (tbl in tables) { org <- tbl$organism - nl <- tbl$notes + nl <- tbl$notes prev_agent_base <- NA_character_ prev_disk_dose <- NA_character_ - + for (r in tbl$first_data:tbl$last_data) { agent <- get_cell(parsed, r, 1) # Skip category headers (rows that have col A text but no data). @@ -817,8 +878,10 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { # columns; on MIC-only sheets col 5 is the notes column and must not # be treated as a data indicator. data_cols <- if (has_disk_columns) c(2, 3, 5, 6, 7) else c(2, 3) - has_any_data <- any(!is.na(vapply(data_cols, function(cc) get_cell(parsed, r, cc)$base, - character(1)))) + has_any_data <- any(!is.na(vapply( + data_cols, function(cc) get_cell(parsed, r, cc)$base, + character(1) + ))) if (is.na(agent$base)) { # A row with values but without an agent name would otherwise be # skipped silently, e.g. if a future table merged agent cells. Rows @@ -831,7 +894,7 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { next } if (!has_any_data) next - + # Agent name and any organism restriction encoded in its formatting # (see split_agent_organism()). Falls back to the raw cell text and # the table-level organism when this row has no split entry (e.g. @@ -843,25 +906,25 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { } else { org } - - mic_s <- get_cell(parsed, r, 2) - mic_r <- get_cell(parsed, r, 3) + + mic_s <- get_cell(parsed, r, 2) + mic_r <- get_cell(parsed, r, 3) mic_atu <- get_cell(parsed, r, 4) # Disk columns (E:H) only exist on sheets that report disk diffusion # breakpoints. On MIC-only sheets, col E is the notes column instead # of the disk dose, so disk cells must not be read from it there. if (has_disk_columns) { disk_dose_cell <- get_cell(parsed, r, 5) - disk_s <- get_cell(parsed, r, 6) - disk_r <- get_cell(parsed, r, 7) + disk_s <- get_cell(parsed, r, 6) + disk_r <- get_cell(parsed, r, 7) disk_atu <- get_cell(parsed, r, 8) } else { disk_dose_cell <- list(base = NA_character_, super = NA_character_) - disk_s <- list(base = NA_character_, super = NA_character_) - disk_r <- list(base = NA_character_, super = NA_character_) + disk_s <- list(base = NA_character_, super = NA_character_) + disk_r <- list(base = NA_character_, super = NA_character_) disk_atu <- list(base = NA_character_, super = NA_character_) } - + # EUCAST occasionally leaves the disk content empty in a row that # continues the previous row's agent, e.g. v16.1 "Amoxicillin- # clavulanic acid, F. nucleatum" directly below "Amoxicillin- @@ -883,7 +946,7 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { } prev_agent_base <- agent_base prev_disk_dose <- disk_dose - + # Notes must apply only to the method they were referenced from: MIC # superscripts resolve to the MIC row's note, disk superscripts to the # DISK row's note. Resolving both against the union of MIC and disk @@ -894,67 +957,71 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { combine_super <- function(...) { parts <- c(...) parts <- parts[!is.na(parts) & parts != ""] - if (length(parts) == 0) return(NA_character_) + if (length(parts) == 0) { + return(NA_character_) + } paste(parts, collapse = ",") } - mic_note <- resolve_notes(nl, combine_super(mic_s$super, agent$super), NA, abbreviations = abbreviations) + mic_note <- resolve_notes(nl, combine_super(mic_s$super, agent$super), NA, abbreviations = abbreviations) disk_note <- resolve_notes(nl, NA, combine_super(disk_s$super, agent$super), abbreviations = abbreviations) - + # MIC row s_val <- parse_bp(mic_s$base) r_val <- parse_bp(mic_r$base) if (!is.na(s_val) || !is.na(r_val)) { idx <- idx + 1L results[[idx]] <- tibble( - guideline = ver$guideline, - version = ver$version, - file_desc = ver$file_desc, - type = "human", - host = "human", - method = "MIC", - site = NA_character_, - mo = row_mo, + guideline = ver$guideline, + version = ver$version, + file_desc = ver$file_desc, + type = "human", + host = "human", + method = "MIC", + site = NA_character_, + mo = row_mo, table_organism = org, - rank_index = NA_integer_, - ab = agent_text, - disk_dose = NA_character_, + rank_index = NA_integer_, + ab = agent_text, + disk_dose = NA_character_, breakpoint_S = s_val, breakpoint_R = r_val, is_bracketed = is_bracketed_bp(mic_s$base) || is_bracketed_bp(mic_r$base), - note = mic_note + note = mic_note ) } - + # DISK row s_val <- parse_bp(disk_s$base) r_val <- parse_bp(disk_r$base) if (!is.na(s_val) || !is.na(r_val)) { idx <- idx + 1L results[[idx]] <- tibble( - guideline = ver$guideline, - version = ver$version, - file_desc = ver$file_desc, - type = "human", - host = "human", - method = "DISK", - site = NA_character_, - mo = row_mo, + guideline = ver$guideline, + version = ver$version, + file_desc = ver$file_desc, + type = "human", + host = "human", + method = "DISK", + site = NA_character_, + mo = row_mo, table_organism = org, - rank_index = NA_integer_, - ab = agent_text, - disk_dose = disk_dose, + rank_index = NA_integer_, + ab = agent_text, + disk_dose = disk_dose, breakpoint_S = s_val, breakpoint_R = r_val, is_bracketed = is_bracketed_bp(disk_s$base) || is_bracketed_bp(disk_r$base), - note = disk_note + note = disk_note ) } } } - - if (idx == 0) return(NULL) + + if (idx == 0) { + return(NULL) + } out <- bind_rows(results[seq_len(idx)]) - + # The non-species related PK-PD breakpoints (v9.0-v13.1) come with EUCAST's # condition for their use, e.g. "These breakpoints are used only when there # are no species-specific breakpoints or other recommendations (a dash or a @@ -962,7 +1029,7 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { # the note of every PK-PD row. if (grepl("Non-species related", organism, ignore.case = TRUE)) { usage <- parsed$full_text[!is.na(parsed$full_text) & parsed$col == 1 & - grepl("^These breakpoints are used only when", trimws(parsed$full_text))] + grepl("^These breakpoints are used only when", trimws(parsed$full_text))] if (length(usage) != 1) { stop("parse_sheet(): the condition for using the PK-PD breakpoints was not found on sheet '", sheet_name, "'") } @@ -977,9 +1044,9 @@ parse_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { # ============================================================================== parse_topical_sheet <- function(xlsx_path, abbreviations = list()) { cells <- xlsx_cells(xlsx_path, sheets = "Topical agents") - + ver <- detect_version(cells) - + parsed <- parse_cells(cells, xlsx_formats(xlsx_path)) # v9.0 has a different, informational table here ("ECOFFs and systemic @@ -996,8 +1063,8 @@ parse_topical_sheet <- function(xlsx_path, abbreviations = list()) { # on, disk contents in row 10, and organism rows (MIC row followed by a # zone diameter row) from row 11 on. Verify this rather than assume it. if (!identical(get_cell(parsed, 6, 1)$base, "Organisms") || - !identical(get_cell(parsed, 10, 2)$base, "Disk content") || - !grepl("^Screening cut-off values", coalesce(get_cell(parsed, 6, 2)$base, ""))) { + !identical(get_cell(parsed, 10, 2)$base, "Disk content") || + !grepl("^Screening cut-off values", coalesce(get_cell(parsed, 6, 2)$base, ""))) { stop("parse_topical_sheet(): unexpected layout of sheet 'Topical agents' in '", basename(xlsx_path), "'") } @@ -1011,15 +1078,18 @@ parse_topical_sheet <- function(xlsx_path, abbreviations = list()) { ab_info[[as.character(col_idx)]] <- list( name = gsub("\r\n", " ", name_cell$base), name_super = name_cell$super, - dose = if (!is.na(dose_cell$base) && !dose_cell$base %in% c("-", "ND")) - paste0(dose_cell$base, " mcg") else NA_character_ + dose = if (!is.na(dose_cell$base) && !dose_cell$base %in% c("-", "ND")) { + paste0(dose_cell$base, " mcg") + } else { + NA_character_ + } ) } - + # Organism rows: col 1 from row 11 onwards, excluding "Notes" org_cells <- parsed |> filter(col == 1, row >= 11, !grepl("^Notes", base_text)) - + organism_pairs <- list() for (i in seq_len(nrow(org_cells))) { mic_row <- org_cells$row[i] @@ -1033,20 +1103,26 @@ parse_topical_sheet <- function(xlsx_path, abbreviations = list()) { mic_row = mic_row, disk_row = disk_row ) } - + # Notes: find in col 1, rows after the last organism data row - last_data_row <- if (length(organism_pairs) > 0) - max(vapply(organism_pairs, function(x) x$disk_row, numeric(1))) else 0L + last_data_row <- if (length(organism_pairs) > 0) { + max(vapply(organism_pairs, function(x) x$disk_row, numeric(1))) + } else { + 0L + } notes_cells <- parsed |> filter(col == 1, row > last_data_row, !grepl("^Notes$", base_text)) - notes_text <- if (nrow(notes_cells) > 0) - paste(notes_cells$full_text, collapse = "\n") else "" + notes_text <- if (nrow(notes_cells) > 0) { + paste(notes_cells$full_text, collapse = "\n") + } else { + "" + } if (is.na(notes_text)) notes_text <- "" notes_lookup <- parse_notes_block(notes_text) - + results <- vector("list", 200) idx <- 0L - + for (od in organism_pairs) { for (col_idx in ab_cols) { cc <- as.character(col_idx) @@ -1055,7 +1131,7 @@ parse_topical_sheet <- function(xlsx_path, abbreviations = list()) { ab_name <- ab_entry$name ab_super <- ab_entry$name_super ab_dose <- ab_entry$dose - + # MIC mic_cell <- get_cell(parsed, od$mic_row, col_idx) mic_val <- parse_bp(mic_cell$base) @@ -1063,7 +1139,7 @@ parse_topical_sheet <- function(xlsx_path, abbreviations = list()) { all_supers <- c(mic_cell$super, ab_super) all_supers <- all_supers[!is.na(all_supers) & all_supers != ""] mic_note <- resolve_notes(notes_lookup, paste(all_supers, collapse = ","), NA, abbreviations = abbreviations) - + if (!is.na(mic_val)) { idx <- idx + 1L results[[idx]] <- tibble( @@ -1077,14 +1153,14 @@ parse_topical_sheet <- function(xlsx_path, abbreviations = list()) { note = mic_note ) } - + # DISK disk_cell <- get_cell(parsed, od$disk_row, col_idx) disk_val <- parse_bp(disk_cell$base) all_supers_d <- c(disk_cell$super, ab_super) all_supers_d <- all_supers_d[!is.na(all_supers_d) & all_supers_d != ""] disk_note <- resolve_notes(notes_lookup, NA, paste(all_supers_d, collapse = ","), abbreviations = abbreviations) - + if (!is.na(disk_val)) { idx <- idx + 1L results[[idx]] <- tibble( @@ -1100,8 +1176,10 @@ parse_topical_sheet <- function(xlsx_path, abbreviations = list()) { } } } - - if (idx == 0) return(NULL) + + if (idx == 0) { + return(NULL) + } bind_rows(results[seq_len(idx)]) } @@ -1122,11 +1200,11 @@ parse_topical_sheet <- function(xlsx_path, abbreviations = list()) { # diffusion method, so only method = "MIC" rows are produced. parse_yeast_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { cells <- xlsx_cells(xlsx_path, sheets = sheet_name) - + ver <- detect_version(cells) - + parsed <- parse_cells(cells, xlsx_formats(xlsx_path)) - + # --- Locate the "Antifungal agent" header row --- hdr_row <- parsed |> filter(col == 1, grepl("^Antifungal agent$", base_text)) |> @@ -1139,19 +1217,23 @@ parse_yeast_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { species_row <- hdr_row + 1L sub_row <- hdr_row + 2L first_data_row <- hdr_row + 3L - + # --- Detect species column-blocks from the sub-header row --- # Each block starts at a cell reading "S <=" (S \u2264) and runs through the # next "R >" and, where present, an immediately following "ATU" column, # stopping before the next "S <=" or the end of populated columns. - sub_cells <- parsed |> filter(row == sub_row) |> arrange(col) - s_cols <- sub_cells |> filter(grepl("^S\\b", base_text)) |> pull(col) - + sub_cells <- parsed |> + filter(row == sub_row) |> + arrange(col) + s_cols <- sub_cells |> + filter(grepl("^S\\b", base_text)) |> + pull(col) + if (length(s_cols) == 0) { message(" No species S/R columns found in sheet '", sheet_name, "', skipping") return(NULL) } - + species_blocks <- list() for (i in seq_along(s_cols)) { s_col <- s_cols[i] @@ -1160,7 +1242,7 @@ parse_yeast_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { # block is 3 columns wide rather than 2) atu_cell <- get_cell(parsed, sub_row, s_col + 2L) has_atu <- !is.na(atu_cell$base) && grepl("^ATU\\b", atu_cell$base) - + sp_cell <- get_cell(parsed, species_row, s_col) species <- if (!is.na(sp_cell$base)) gsub("\r?\n", " ", sp_cell$base) else NA_character_ if (is.na(species)) next @@ -1179,13 +1261,13 @@ parse_yeast_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { if (grepl("^[A-Z]\\.\\s", species) && substr(species, 1, 1) == substr(sheet_genus, 1, 1)) { species <- sub("^[A-Z]\\.", sheet_genus, species) } - + species_blocks[[length(species_blocks) + 1]] <- list( species = species, s_col = s_col, r_col = r_col, atu_col = if (has_atu) s_col + 2L else NA_integer_ ) } - + # --- Locate the end of the data block (row before the "Notes" label) --- notes_label_row <- parsed |> filter(col == 1, grepl("^Notes$", base_text), row > first_data_row) |> @@ -1195,7 +1277,7 @@ parse_yeast_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { } else { max(parsed$row) } - + # --- Notes block: one note per row below the "Notes" label, col A --- notes_text <- if (length(notes_label_row) > 0) { note_cells <- parsed |> @@ -1206,52 +1288,54 @@ parse_yeast_sheet <- function(xlsx_path, sheet_name, abbreviations = list()) { "" } notes_lookup <- parse_notes_block(notes_text) - + # --- Extract breakpoint rows: one per (agent, species) combination --- results <- vector("list", 1000) idx <- 0L - + for (r in first_data_row:last_data_row) { agent_cell <- get_cell(parsed, r, 1) if (is.na(agent_cell$base)) next agent_name <- gsub("\r?\n", " ", agent_cell$base) agent_super <- agent_cell$super - + for (sb in species_blocks) { s_cell <- get_cell(parsed, r, sb$s_col) r_cell <- get_cell(parsed, r, sb$r_col) - + s_val <- parse_bp(s_cell$base) r_val <- parse_bp(r_cell$base) if (is.na(s_val) && is.na(r_val)) next - + all_supers <- c(s_cell$super, r_cell$super, agent_super) all_supers <- all_supers[!is.na(all_supers) & all_supers != ""] note_text <- resolve_notes(notes_lookup, paste(all_supers, collapse = ","), NA, abbreviations = abbreviations) - + idx <- idx + 1L results[[idx]] <- tibble( - guideline = ver$guideline, - version = ver$version, - file_desc = ver$file_desc, - type = "human", - host = "human", - method = "MIC", - site = NA_character_, - mo = sb$species, + guideline = ver$guideline, + version = ver$version, + file_desc = ver$file_desc, + type = "human", + host = "human", + method = "MIC", + site = NA_character_, + mo = sb$species, table_organism = sb$species, - rank_index = NA_integer_, - ab = agent_name, - disk_dose = NA_character_, + rank_index = NA_integer_, + ab = agent_name, + disk_dose = NA_character_, breakpoint_S = s_val, breakpoint_R = r_val, is_bracketed = is_bracketed_bp(s_cell$base) || is_bracketed_bp(r_cell$base), - note = note_text + note = note_text ) } } - - if (idx == 0) return(NULL) + + if (idx == 0) { + return(NULL) + } bind_rows(results[seq_len(idx)]) } @@ -1289,19 +1373,21 @@ parse_workbook_notes <- function(xlsx_path) { all_sheets <- xlsx_sheet_names(xlsx_path) notes_sheet <- all_sheets[grepl("^\\s*(\\d+\\.\\s*)?Notes\\s*$", all_sheets, ignore.case = TRUE)] if (length(notes_sheet) != 1) { - stop("parse_workbook_notes(): expected exactly one 'Notes' sheet in '", basename(xlsx_path), - "', found: ", paste(notes_sheet, collapse = ", ")) + stop( + "parse_workbook_notes(): expected exactly one 'Notes' sheet in '", basename(xlsx_path), + "', found: ", paste(notes_sheet, collapse = ", ") + ) } txt <- parse_cells(xlsx_cells(xlsx_path, sheets = notes_sheet), xlsx_formats(xlsx_path)) |> filter(!is.na(full_text)) |> pull(full_text) |> gsub(pattern = "\u00A0", replacement = " ", fixed = TRUE) |> trimws() - + abbr_txt <- txt[grepl("^[A-Z]{2,5}\\s*=\\s*\\S", txt)] abbreviations <- as.list(trimws(sub("^[A-Z]{2,5}\\s*=\\s*", "", abbr_txt))) names(abbreviations) <- sub("\\s*=.*$", "", abbr_txt) - + bracket_definition <- NA_character_ def_brackets_sign <- txt[grepl("^\\(\\s*\\)\\s*=", txt)] def_own_note <- sub("^\\d+\\.\\s*", "", txt[grepl("^(\\d+\\.\\s*)?Breakpoints in brackets", txt)]) @@ -1314,7 +1400,7 @@ parse_workbook_notes <- function(xlsx_path) { bracket_definition <- sub("^.*?(Breakpoints in brackets)", "\\1", def_in_note[1]) } bracket_definition <- trimws(gsub("\\s+", " ", bracket_definition)) - + list(abbreviations = abbreviations, bracket_definition = bracket_definition) } @@ -1322,12 +1408,14 @@ parse_workbook_notes <- function(xlsx_path) { # 10. Parse all data sheets # ============================================================================== parse_workbook <- function(xlsx_path, - skip_sheets = c("Content", "Changes", "Notes", - "Guidance", "Dosages", - "Technical uncertainty", - "Non-species related breakpoints")) { + skip_sheets = c( + "Content", "Changes", "Notes", + "Guidance", "Dosages", + "Technical uncertainty", + "Non-species related breakpoints" + )) { all_sheets <- xlsx_sheet_names(xlsx_path) - + # Some workbooks (e.g. the antifungal AFST tables) number-prefix their # sheet names, e.g. "1. Notes", "7. Dosages", "6. Aspergillus ", and are # not always consistent in capitalisation or separators, e.g. @@ -1337,8 +1425,10 @@ parse_workbook <- function(xlsx_path, # (with underscores read as spaces) by whether a skip name occurs anywhere # in the (trimmed) sheet name instead. is_skipped <- vapply(gsub("_", " ", trimws(all_sheets)), function(s) { - any(vapply(skip_sheets, function(skip) grepl(tolower(skip), tolower(s), fixed = TRUE), - logical(1))) + any(vapply( + skip_sheets, function(skip) grepl(tolower(skip), tolower(s), fixed = TRUE), + logical(1) + )) }, logical(1)) # Hidden sheets are not part of the published tables: v14.0-v16.1 contain a # hidden, outdated copy of the v14.0 PK-PD table with editorial comments @@ -1348,9 +1438,9 @@ parse_workbook <- function(xlsx_path, message(" skipping hidden sheet(s): ", paste(hidden, collapse = ", ")) } data_sheets <- all_sheets[!is_skipped & !all_sheets %in% hidden] - + wb_notes <- parse_workbook_notes(xlsx_path) - + results <- list() for (s in data_sheets) { message("Parsing ", basename(xlsx_path), ": ", s) @@ -1378,21 +1468,24 @@ parse_workbook <- function(xlsx_path, message(" -> ", nrow(res), " rows") } } - + out <- bind_rows(results) - + # Add EUCAST's own definition of breakpoints in brackets to the note of # every bracketed row, so the caveat travels with the values in the raw # data (they are excluded from the clinical_breakpoints table). if (any(out$is_bracketed)) { if (is.na(wb_notes$bracket_definition)) { - stop("parse_workbook(): '", basename(xlsx_path), "' has bracketed breakpoints, ", - "but no definition of breakpoints in brackets was found on its Notes sheet") + stop( + "parse_workbook(): '", basename(xlsx_path), "' has bracketed breakpoints, ", + "but no definition of breakpoints in brackets was found on its Notes sheet" + ) } bracket_note <- paste0("[( )] ", wb_notes$bracket_definition) out$note[out$is_bracketed] <- ifelse(is.na(out$note[out$is_bracketed]), - bracket_note, - paste(bracket_note, out$note[out$is_bracketed], sep = " | ")) + bracket_note, + paste(bracket_note, out$note[out$is_bracketed], sep = " | ") + ) } out } @@ -1401,33 +1494,34 @@ parse_workbook <- function(xlsx_path, # 11. Run # ============================================================================== -breakpoint_files <- list.files(path = "data-raw", - pattern = "breakpoint.*table.*[.]xlsx$", - full.names = TRUE, - recursive = FALSE, - ignore.case = TRUE) +breakpoint_files <- list.files( + path = "data-raw", + pattern = "breakpoint.*table.*[.]xlsx$", + full.names = TRUE, + recursive = FALSE, + ignore.case = TRUE +) breakpoint_files <- breakpoint_files[breakpoint_files %unlike% "dosages"] breakpoints_eucast <- tibble() for (xlsx_path in breakpoint_files) { - message("Parsing ", basename(xlsx_path)) result <- suppressMessages(parse_workbook(xlsx_path)) - + # cat("\n============================\n") cat("Total rows:", nrow(result), "\n\n") # glimpse(result) - + # cat("\n--- Rows per sheet ---\n") # result |> count(sheet) |> print(n = 40) - + # cat("\n--- Rows per organism (top 20) ---\n") # result |> count(mo) |> arrange(desc(n)) |> head(20) |> print() - + breakpoints_eucast <- breakpoints_eucast |> bind_rows(result) - + # saveRDS(result, "/home/claude/eucast_all_breakpoints.rds") # write.csv(result, "/home/claude/eucast_all_breakpoints.csv", row.names = FALSE) # cat("\nSaved.\n") @@ -1436,8 +1530,10 @@ for (xlsx_path in breakpoint_files) { breakpoints_eucast_raw <- breakpoints_eucast if (!is.null(parse_log$disk_dose_inherited)) { - message("NOTE: ", nrow(parse_log$disk_dose_inherited), " disk breakpoint row(s) had no disk content and took it ", - "from the previous row of the same agent:") + message( + "NOTE: ", nrow(parse_log$disk_dose_inherited), " disk breakpoint row(s) had no disk content and took it ", + "from the previous row of the same agent:" + ) print(parse_log$disk_dose_inherited) } @@ -1505,10 +1601,10 @@ split_organism_from_ab <- function(ab, mo) { # Strip parenthetical content first to test for a bare comma. ab_no_parens <- gsub("\\([^)]*\\)", "", ab) has_bare_comma <- grepl(",", ab_no_parens) - + ab_clean <- ab mo_from_ab <- rep(NA_character_, length(ab)) - + for (i in which(has_bare_comma)) { # Split at the first bare comma (outside parentheses) # Simple approach: find the first comma in ab_no_parens, use its @@ -1516,23 +1612,24 @@ split_organism_from_ab <- function(ab, mo) { comma_pos <- regexpr(",", ab_no_parens[i]) if (comma_pos < 1) next before <- trimws(substr(ab[i], 1, comma_pos - 1)) - after <- trimws(substr(ab[i], comma_pos + 1, nchar(ab[i]))) + after <- trimws(substr(ab[i], comma_pos + 1, nchar(ab[i]))) if (!nzchar(after)) next - + # The part after the comma must look like an organism restriction, # not a drug-name continuation. Heuristic: starts with a genus-like # capitalised word (3+ letters), or starts with "other" / "except", # or contains known taxonomic suffixes (cocci, bacill, etc.) is_organism <- grepl( "^(other\\b|except\\b|[a-z]*cocc|[a-z]*bacill|[A-Z][a-z]{2,}\\b)", - after, ignore.case = FALSE, perl = TRUE + after, + ignore.case = FALSE, perl = TRUE ) if (!is_organism) next - + ab_clean[i] <- before mo_from_ab[i] <- after } - + tibble(ab_clean = ab_clean, mo_from_ab = mo_from_ab) } @@ -1637,8 +1734,10 @@ build_site <- function(sheet_site, route, qualifier) { q <- tolower(gsub("\\s+", " ", trimws(qualifier))) unknown <- unique(qualifier[!is.na(q) & !q %in% names(eucast_site_vocabulary)]) if (length(unknown) > 0) { - stop("build_site(): unknown indication qualifier(s), add to eucast_site_vocabulary: '", - paste(unknown, collapse = "', '"), "'") + stop( + "build_site(): unknown indication qualifier(s), add to eucast_site_vocabulary: '", + paste(unknown, collapse = "', '"), "'" + ) } indication <- unname(eucast_site_vocabulary[q]) vapply(seq_along(q), function(i) { @@ -1702,7 +1801,7 @@ expand_abbreviated_genus <- function(pieces, fallback_genus = NA_character_) { return(p) } if (!is.na(current_genus) && grepl("^[A-Z]\\.\\s", p) && - substr(p, 1, 1) == substr(current_genus, 1, 1)) { + substr(p, 1, 1) == substr(current_genus, 1, 1)) { return(sub("^[A-Z]\\.", current_genus, p)) } if (!is.na(current_genus) && grepl("^[a-z]+$", p)) { @@ -1728,7 +1827,7 @@ split_mo_list <- function(x, sheet_name = NA_character_) { # not matching the "Genus species" shape on at least one piece, and are # returned unchanged so as.mo() resolves them directly to their # species-group code. - + # Resolve each distinct sheet's own organism once (not per row -- x and # sheet_name are typically thousands of rows spanning ~40 distinct # sheets), to use as an abbreviation seed (see expand_abbreviated_genus()) @@ -1746,7 +1845,7 @@ split_mo_list <- function(x, sheet_name = NA_character_) { genus_lookup[sn] <- mo_genus(sheet_mo) } } - + map2(x, sheet_name, function(s, sn) { sheet_genus_fallback <- if (!is.na(sn) && sn %in% names(genus_lookup)) genus_lookup[[sn]] else NA_character_ split_mo_list_one(s, sheet_genus_fallback) @@ -1807,9 +1906,11 @@ split_mo_list_one <- function(s, sheet_genus_fallback) { pieces <- pieces[pieces != ""] pieces <- strip_mo_exceptions(pieces) pieces <- trimws(gsub("\\s*\\(\\s*\\)\\s*$", "", pieces)) # drop now-empty "()" leftovers - - if (length(pieces) <= 1) return(s_clean) - + + if (length(pieces) <= 1) { + return(s_clean) + } + # Only treat as a genuine multi-taxon list if every piece looks like a # taxon on its own: either an abbreviated genus initial ("E.", "P." # followed by a species epithet), a capitalised word of 2+ letters @@ -1844,8 +1945,10 @@ split_mo_list_one <- function(s, sheet_genus_fallback) { # whole cell falls back to the original, unsplit string. looks_like_taxon <- grepl("^[A-Z]\\.\\s", pieces) | grepl("^[A-Z][a-z]+(\\.|\\s|$)", pieces) | grepl("^[a-z]+$", pieces) | grepl("^coagulase-negative staphylococci$", pieces, ignore.case = TRUE) - if (!all(looks_like_taxon)) return(s_clean) - + if (!all(looks_like_taxon)) { + return(s_clean) + } + # Reject a piece containing more than one capitalised, 3+ letter word # (a rough genus/proper-name detector): this signals two taxa were # fused into one piece because a separating comma was missing in the @@ -1856,10 +1959,14 @@ split_mo_list_one <- function(s, sheet_genus_fallback) { # as.mo("Citrobacter spp. Klebsiella spp.") resolves to Citrobacter # enshiensis) -- so this must be caught before as.mo() ever sees it, # by falling back to the unsplit original string. - genus_like_count <- vapply(pieces, function(p) length(gregexpr("\\b[A-Z][a-z]{2,}\\b", p, perl = TRUE)[[1]]), - integer(1)) - if (any(genus_like_count > 1)) return(s_clean) - + genus_like_count <- vapply( + pieces, function(p) length(gregexpr("\\b[A-Z][a-z]{2,}\\b", p, perl = TRUE)[[1]]), + integer(1) + ) + if (any(genus_like_count > 1)) { + return(s_clean) + } + expand_abbreviated_genus(pieces, fallback_genus = sheet_genus_fallback) } @@ -1908,10 +2015,14 @@ breakpoints_eucast <- breakpoints_eucast_raw |> is_blocker = is_bracketed | (!is_bp_value(breakpoint_S) & !is_bp_value(breakpoint_R)), note = case_when( is_bracketed ~ blocking_note(paste0("EUCAST gives breakpoints in brackets only (S ", breakpoint_S, ", R ", breakpoint_R, ")"), note), - is_blocker ~ blocking_note(paste0("EUCAST gives ", - coalesce(bp_placeholder_meaning[toupper(trimws(breakpoint_S))], - bp_placeholder_meaning[toupper(trimws(breakpoint_R))], - "no value")), note), + is_blocker ~ blocking_note(paste0( + "EUCAST gives ", + coalesce( + bp_placeholder_meaning[toupper(trimws(breakpoint_S))], + bp_placeholder_meaning[toupper(trimws(breakpoint_R))], + "no value" + ) + ), note), TRUE ~ note ), # placeholders become NA; a row keeps a breakpoint as long as one of S and @@ -1929,8 +2040,10 @@ breakpoints_eucast <- breakpoints_eucast_raw |> ab_mo_fix <- split_organism_from_ab(breakpoints_eucast$ab, breakpoints_eucast$mo) fixed_rows <- !is.na(ab_mo_fix$mo_from_ab) if (any(fixed_rows)) { - message("NOTE: ", sum(fixed_rows), " row(s) had an organism restriction embedded in the ab column; ", - "splitting into ab + mo (e.g. '", breakpoints_eucast$ab[which(fixed_rows)[1]], "').") + message( + "NOTE: ", sum(fixed_rows), " row(s) had an organism restriction embedded in the ab column; ", + "splitting into ab + mo (e.g. '", breakpoints_eucast$ab[which(fixed_rows)[1]], "')." + ) breakpoints_eucast$ab[fixed_rows] <- ab_mo_fix$ab_clean[fixed_rows] breakpoints_eucast$mo[fixed_rows] <- ab_mo_fix$mo_from_ab[fixed_rows] } @@ -1939,8 +2052,10 @@ if (any(fixed_rows)) { breakpoints_eucast <- breakpoints_eucast |> mutate(note = case_when( trimws(gsub("\\s+", " ", mo)) != "MRSA" ~ note, - is_blocker ~ trimws(paste0(trimws(sub("^(\\[No breakpoint\\][^|]*).*$", "\\1", note)), " | [Scope] EUCAST gives this for MRSA ", - sub("^\\[No breakpoint\\][^|]*", "", note))), + is_blocker ~ trimws(paste0( + trimws(sub("^(\\[No breakpoint\\][^|]*).*$", "\\1", note)), " | [Scope] EUCAST gives this for MRSA ", + sub("^\\[No breakpoint\\][^|]*", "", note) + )), is.na(note) ~ "[Scope] EUCAST gives this breakpoint for MRSA", TRUE ~ paste("[Scope] EUCAST gives this breakpoint for MRSA", note, sep = " | ") )) @@ -1981,7 +2096,8 @@ extract_mo_exceptions <- function(x) { pieces <- pieces[nzchar(pieces)] if (nzchar(genus)) { pieces <- ifelse(grepl("^[A-Z]\\.\\s*[a-z]", pieces) & substr(pieces, 1, 1) == substr(genus, 1, 1), - sub("^[A-Z]\\.\\s*", paste0(genus, " "), pieces), pieces) + sub("^[A-Z]\\.\\s*", paste0(genus, " "), pieces), pieces + ) } pieces })) @@ -1994,9 +2110,11 @@ exceptions <- breakpoints_eucast |> tidyr::unnest(exception) if (nrow(exceptions) > 0) { exception_blockers <- exceptions |> - mutate(note = blocking_note(paste0("EUCAST excludes ", exception, " ('", gsub("\\s+", " ", mo), "')"), NA_character_), - mo = exception, site = NA_character_, is_blocker = TRUE, - breakpoint_S = NA_character_, breakpoint_R = NA_character_) |> + mutate( + note = blocking_note(paste0("EUCAST excludes ", exception, " ('", gsub("\\s+", " ", mo), "')"), NA_character_), + mo = exception, site = NA_character_, is_blocker = TRUE, + breakpoint_S = NA_character_, breakpoint_R = NA_character_ + ) |> select(-exception) breakpoints_eucast <- bind_rows(breakpoints_eucast, exception_blockers) } @@ -2042,21 +2160,25 @@ mo_uncertainties_eucast <- AMR:::AMR_env$mo_uncertainties # does not cover the group, as happened with "S. anginosus group". unmapped_groups <- breakpoints_eucast |> distinct(mo_text, mo) |> - filter(grepl("group|anaerob|MRSA|MSSA|-negative|-positive|cocci\\b|bacteria\\b", mo_text, ignore.case = TRUE), - !grepl("spp\\.$", mo_text), - # a text that is exactly the name of the taxon it resolved to, such - # as "Peptostreptococcus anaerobius", is not a descriptive group - tolower(mo_text) != tolower(mo_name(mo, keep_synonyms = TRUE)), - !mo_rank(mo, keep_synonyms = TRUE) %in% "species group", - !mo %in% unlist(eucast_organism_groups)) + filter( + grepl("group|anaerob|MRSA|MSSA|-negative|-positive|cocci\\b|bacteria\\b", mo_text, ignore.case = TRUE), + !grepl("spp\\.$", mo_text), + # a text that is exactly the name of the taxon it resolved to, such + # as "Peptostreptococcus anaerobius", is not a descriptive group + tolower(mo_text) != tolower(mo_name(mo, keep_synonyms = TRUE)), + !mo_rank(mo, keep_synonyms = TRUE) %in% "species group", + !mo %in% unlist(eucast_organism_groups) + ) if (nrow(unmapped_groups) > 0) { print(unmapped_groups |> mutate(name = mo_name(mo, keep_synonyms = TRUE))) stop(nrow(unmapped_groups), " descriptive organism group(s) resolved to a single taxon, add them to eucast_organism_groups") } if (nrow(mo_uncertainties_eucast) > 0) { - message("NOTE: ", nrow(mo_uncertainties_eucast), " organism string(s) were resolved with uncertainty ", - "(matched below the default confidence, or against multiple candidates). ", - "Inspect `mo_uncertainties_eucast` and cross-check against the source sheet before trusting these rows.") + message( + "NOTE: ", nrow(mo_uncertainties_eucast), " organism string(s) were resolved with uncertainty ", + "(matched below the default confidence, or against multiple candidates). ", + "Inspect `mo_uncertainties_eucast` and cross-check against the source sheet before trusting these rows." + ) } breakpoints_eucast <- breakpoints_eucast |> @@ -2100,9 +2222,11 @@ ab_previously_coerced_eucast <- AMR:::AMR_env$ab_previously_coerced |> filter(tolower(trimws(x_bak)) %in% tolower(trimws(unique(breakpoints_eucast$ab_input)))) breakpoints_eucast <- breakpoints_eucast |> select(-ab_input) if (nrow(ab_previously_coerced_eucast) > 0) { - message("NOTE: ", nrow(ab_previously_coerced_eucast), " antibiotic string(s) were resolved via approximate/previous-coercion ", - "matching rather than an exact code or name match. ", - "Inspect `ab_previously_coerced_eucast` and cross-check against the source sheet before trusting these rows.") + message( + "NOTE: ", nrow(ab_previously_coerced_eucast), " antibiotic string(s) were resolved via approximate/previous-coercion ", + "matching rather than an exact code or name match. ", + "Inspect `ab_previously_coerced_eucast` and cross-check against the source sheet before trusting these rows." + ) } # Restrictions in the notes ---- @@ -2185,8 +2309,10 @@ taxon_contains <- function(broad, narrow) { broad %in% AMR::microorganisms.groups$mo_group[AMR::microorganisms.groups$mo == as.character(narrow)] } to_blocker <- function(df, reason) { - df |> mutate(is_blocker = TRUE, breakpoint_S = NA_character_, breakpoint_R = NA_character_, - site = NA_character_, note = blocking_note(reason, note)) + df |> mutate( + is_blocker = TRUE, breakpoint_S = NA_character_, breakpoint_R = NA_character_, + site = NA_character_, note = blocking_note(reason, note) + ) } for (i in seq_len(nrow(eucast_note_rules))) { rule <- eucast_note_rules[i, ] @@ -2211,9 +2337,11 @@ for (i in seq_len(nrow(eucast_note_rules))) { breakpoints_eucast[rows, ] <- to_blocker(breakpoints_eucast[rows, ], reason_of(rows)) } else if (rule$action == "site") { breakpoints_eucast$site[governed] <- if_else(is.na(breakpoints_eucast$site[governed]), rule$target, - if_else(grepl(rule$target, breakpoints_eucast$site[governed], fixed = TRUE), - breakpoints_eucast$site[governed], - paste(breakpoints_eucast$site[governed], rule$target, sep = ", "))) + if_else(grepl(rule$target, breakpoints_eucast$site[governed], fixed = TRUE), + breakpoints_eucast$site[governed], + paste(breakpoints_eucast$site[governed], rule$target, sep = ", ") + ) + ) } else if (rule$action == "restrict") { rows <- which(governed & !breakpoints_eucast$is_blocker) for (r in rows) { @@ -2269,8 +2397,10 @@ derived_rows <- list() # (only the rows of the test itself, e.g. "Gentamicin (test for high-level # aminoglycoside resistance)"; other aminoglycosides refer to the same note) hlar_rows <- breakpoints_eucast |> - filter(grepl("Negative test: Isolates with (gentamicin|streptomycin) MIC \u2264", note), - ab %in% c("GEN", "STR1"), site %in% "Screen") + filter( + grepl("Negative test: Isolates with (gentamicin|streptomycin) MIC \u2264", note), + ab %in% c("GEN", "STR1"), site %in% "Screen" + ) for (r in seq_len(nrow(hlar_rows))) { row <- hlar_rows[r, ] # the note of a row can also hold the test for the other agent, so the @@ -2285,38 +2415,46 @@ for (r in seq_len(nrow(hlar_rows))) { value <- if (row$method == "MIC") neg[2] else neg[3] if (!nzchar(value)) next # e.g. no zone diameter given in this version derived_rows[[length(derived_rows) + 1]] <- row |> - mutate(ab = as.ab(if (agent == "gentamicin") "GEH" else "STH"), site = NA_character_, is_blocker = FALSE, - breakpoint_S = value, breakpoint_R = value, - note = sub("^\\[No breakpoint\\][^|]*(\\| )?", "", note)) + mutate( + ab = as.ab(if (agent == "gentamicin") "GEH" else "STH"), site = NA_character_, is_blocker = FALSE, + breakpoint_S = value, breakpoint_R = value, + note = sub("^\\[No breakpoint\\][^|]*(\\| )?", "", note) + ) } fox_mic <- breakpoints_eucast |> - filter(ab == "FOX", method == "MIC", - grepl("S\\. aureus and S\\. lugdunensis with cefoxitin MIC values >[0-9]+ mg/L and S\\. saprophyticus with cefoxitin MIC values >[0-9]+ mg/L are methicillin resistant", note)) |> + filter( + ab == "FOX", method == "MIC", + grepl("S\\. aureus and S\\. lugdunensis with cefoxitin MIC values >[0-9]+ mg/L and S\\. saprophyticus with cefoxitin MIC values >[0-9]+ mg/L are methicillin resistant", note) + ) |> distinct(guideline, .keep_all = TRUE) for (r in seq_len(nrow(fox_mic))) { row <- fox_mic[r, ] m <- regmatches(row$note, regexec("S\\. aureus and S\\. lugdunensis with cefoxitin MIC values >([0-9]+) mg/L and S\\. saprophyticus with cefoxitin MIC values >([0-9]+) mg/L", row$note))[[1]] for (sp in list(c("B_STPHY_AURS", m[2]), c("B_STPHY_LGDN", m[2]), c("B_STPHY_SPRP", m[3]))) { derived_rows[[length(derived_rows) + 1]] <- row |> - mutate(mo = as.mo(sp[1]), site = "Screen", is_blocker = FALSE, breakpoint_S = sp[2], breakpoint_R = sp[2], - note = sub("^\\[No breakpoint\\][^|]*(\\| )?", "", note)) + mutate( + mo = as.mo(sp[1]), site = "Screen", is_blocker = FALSE, breakpoint_S = sp[2], breakpoint_R = sp[2], + note = sub("^\\[No breakpoint\\][^|]*(\\| )?", "", note) + ) } } if (length(derived_rows) > 0) { derived <- bind_rows(derived_rows) - message("NOTE: ", nrow(derived), " screening breakpoint row(s) taken from the notes (", - paste(unique(paste(derived$guideline, derived$ab, derived$method)), collapse = ", "), ")") + message( + "NOTE: ", nrow(derived), " screening breakpoint row(s) taken from the notes (", + paste(unique(paste(derived$guideline, derived$ab, derived$method)), collapse = ", "), ")" + ) breakpoints_eucast <- bind_rows(breakpoints_eucast, derived) } cons_rule <- "If coagulase-negative staphylococci are not identified to species level, use zone diameter breakpoints S\u2265([0-9]+), R<([0-9]+) mm" for (g in unique(breakpoints_eucast$guideline[grepl(cons_rule, breakpoints_eucast$note) & breakpoints_eucast$ab == "FOX" & breakpoints_eucast$method == "DISK"])) { rows <- which(breakpoints_eucast$guideline == g & breakpoints_eucast$ab == "FOX" & breakpoints_eucast$method == "DISK" & - breakpoints_eucast$mo == "B_STPHY_CONS" & !breakpoints_eucast$is_blocker) + breakpoints_eucast$mo == "B_STPHY_CONS" & !breakpoints_eucast$is_blocker) if (length(rows) != 1) stop("expected one cefoxitin zone diameter row for coagulase-negative staphylococci in ", g) m <- regmatches(breakpoints_eucast$note[rows], regexec(cons_rule, breakpoints_eucast$note[rows]))[[1]] if (length(m) != 3 || m[2] != m[3]) stop("unexpected cefoxitin rule for unidentified CoNS in ", g) own_rows <- unique(as.character(breakpoints_eucast$mo[breakpoints_eucast$guideline == g & breakpoints_eucast$ab == "FOX" & - breakpoints_eucast$method == "DISK" & breakpoints_eucast$mo != "B_STPHY_CONS"])) + breakpoints_eucast$method == "DISK" & breakpoints_eucast$mo != "B_STPHY_CONS"])) members <- setdiff(as.character(AMR::microorganisms.groups$mo[AMR::microorganisms.groups$mo_group == "B_STPHY_CONS"]), own_rows) species_rows <- breakpoints_eucast[rep(rows, length(members)), ] species_rows$mo <- as.mo(members) @@ -2363,8 +2501,10 @@ breakpoints_eucast <- bind_rows(breakpoints_eucast, scope_blockers) if (!is.null(parse_log$mic_scope_extensions)) { scope_ext <- parse_log$mic_scope_extensions |> distinct() |> - mutate(from_mo = as.character(as.mo(from_text, info = FALSE)), - to_mo = as.character(as.mo(to_text, info = FALSE))) + mutate( + from_mo = as.character(as.mo(from_text, info = FALSE)), + to_mo = as.character(as.mo(to_text, info = FALSE)) + ) if (anyNA(scope_ext$from_mo) || anyNA(scope_ext$to_mo) || any(c(scope_ext$from_mo, scope_ext$to_mo) == "UNKNOWN")) { print(scope_ext) stop("species in a MIC scope statement could not be resolved, see above") @@ -2373,18 +2513,25 @@ if (!is.null(parse_log$mic_scope_extensions)) { filter(method == "MIC") |> mutate(mo_chr = as.character(mo)) |> inner_join(scope_ext |> select(guideline, sheet, mo_chr = from_mo, to_mo, statement), - by = c("guideline", "sheet", "mo_chr")) |> - mutate(mo = as.mo(to_mo), - note = case_when( - is_blocker ~ trimws(paste0(trimws(sub("^(\\[No breakpoint\\][^|]*).*$", "\\1", note)), " | [Scope] ", statement, " ", - sub("^\\[No breakpoint\\][^|]*", "", note))), - is.na(note) ~ paste0("[Scope] ", statement), - TRUE ~ paste0("[Scope] ", statement, " | ", note) - )) |> + by = c("guideline", "sheet", "mo_chr") + ) |> + mutate( + mo = as.mo(to_mo), + note = case_when( + is_blocker ~ trimws(paste0( + trimws(sub("^(\\[No breakpoint\\][^|]*).*$", "\\1", note)), " | [Scope] ", statement, " ", + sub("^\\[No breakpoint\\][^|]*", "", note) + )), + is.na(note) ~ paste0("[Scope] ", statement), + TRUE ~ paste0("[Scope] ", statement, " | ", note) + ) + ) |> select(-mo_chr, -to_mo, -statement) |> anti_join(breakpoints_eucast |> filter(method == "MIC"), by = c("guideline", "mo", "ab", "method", "site")) - message("NOTE: ", nrow(scope_rows), " MIC breakpoint row(s) added following EUCAST's statement(s): ", - paste(unique(paste0(scope_ext$guideline, " ", scope_ext$from_text, " -> ", scope_ext$to_text)), collapse = ", ")) + message( + "NOTE: ", nrow(scope_rows), " MIC breakpoint row(s) added following EUCAST's statement(s): ", + paste(unique(paste0(scope_ext$guideline, " ", scope_ext$from_text, " -> ", scope_ext$to_text)), collapse = ", ") + ) breakpoints_eucast <- bind_rows(breakpoints_eucast, scope_rows) } @@ -2458,10 +2605,10 @@ breakpoints_eucast <- breakpoints_eucast |> })) |> # Greek symbols and EM dash symbols are not allowed by CRAN, so replace them with ASCII: mutate(disk_dose = disk_dose %>% - gsub("\u03bc", "mc", ., fixed = TRUE) %>% # this is 'mu', \u03bc - gsub("\u00b5", "mc", ., fixed = TRUE) %>% # this is 'micro', \u00b5 (yes, they look the same) - gsub("\u2013", "-", ., fixed = TRUE) %>% - gsub("(?<=\\d)(?=[a-zA-Z])", " ", ., perl = TRUE)) # keep a space after a number, e.g. "1mcg" to "1 mcg" + gsub("\u03bc", "mc", ., fixed = TRUE) %>% # this is 'mu', \u03bc + gsub("\u00b5", "mc", ., fixed = TRUE) %>% # this is 'micro', \u00b5 (yes, they look the same) + gsub("\u2013", "-", ., fixed = TRUE) %>% + gsub("(?<=\\d)(?=[a-zA-Z])", " ", ., perl = TRUE)) # keep a space after a number, e.g. "1mcg" to "1 mcg" # Every row must have resolved to an organism and an antimicrobial. as.mo() # returns the code "UNKNOWN" rather than NA when it finds no match at all @@ -2470,8 +2617,12 @@ breakpoints_eucast <- breakpoints_eucast |> # the parsing above (e.g. a new free-text pattern), never a genuine ambiguity. # The only exception is the non-species related PK-PD table, which is coded # as "UNKNOWN" on purpose (as.sir() uses it as the last resort). -unresolved_mo <- breakpoints_eucast |> filter(is.na(mo) | (mo == "UNKNOWN" & !grepl("^PK", sheet))) |> distinct(sheet, ref_tbl, ab, mo_text) -unresolved_ab <- breakpoints_eucast |> filter(is.na(ab)) |> distinct(sheet, ref_tbl) +unresolved_mo <- breakpoints_eucast |> + filter(is.na(mo) | (mo == "UNKNOWN" & !grepl("^PK", sheet))) |> + distinct(sheet, ref_tbl, ab, mo_text) +unresolved_ab <- breakpoints_eucast |> + filter(is.na(ab)) |> + distinct(sheet, ref_tbl) if (nrow(unresolved_mo) > 0 || nrow(unresolved_ab) > 0) { print(unresolved_mo, n = Inf) print(unresolved_ab, n = Inf) @@ -2544,17 +2695,21 @@ if (nrow(missing_dose) > 0) { # S breakpoint, and only screening tests may lack an R breakpoint. bad_rows <- breakpoints_eucast |> filter((is_blocker & (!is.na(breakpoint_S) | !is.na(breakpoint_R) | !grepl("^\\[No breakpoint\\] ", note))) | - (!is_blocker & (is.na(breakpoint_S) | (is.na(breakpoint_R) & !grepl("screen", site, ignore.case = TRUE))))) + (!is_blocker & (is.na(breakpoint_S) | (is.na(breakpoint_R) & !grepl("screen", site, ignore.case = TRUE))))) if (nrow(bad_rows) > 0) { print(bad_rows |> select(guideline, mo, ab, method, site, breakpoint_S, breakpoint_R, ref_tbl, note), n = Inf) stop(nrow(bad_rows), " rows are neither a complete breakpoint nor a proper blocking row, see above") } breakpoints_eucast <- breakpoints_eucast |> - select(guideline, type, host, method, site, mo, rank_index, ab, ref_tbl, - disk_dose, breakpoint_S, breakpoint_R, uti, is_SDD, note) + select( + guideline, type, host, method, site, mo, rank_index, ab, ref_tbl, + disk_dose, breakpoint_S, breakpoint_R, uti, is_SDD, note + ) -breakpoints_eucast |> count(guideline) |> print() +breakpoints_eucast |> + count(guideline) |> + print() # Which guideline years these workbooks cover, separately for bacteria and # fungi: the bacterial tables and the antifungal (AFST) tables are separate @@ -2577,8 +2732,9 @@ merge_eucast_breakpoints <- function(clinical_breakpoints, breakpoints_eucast, e # the antifungal tables scope_of <- function(mo, ab) { if_else(mo_kingdom(mo, keep_synonyms = TRUE) %in% "Fungi" | - (as.character(mo) == "UNKNOWN" & ab_group(ab) %in% "Antifungals"), - "Fungi", "Bacteria") + (as.character(mo) == "UNKNOWN" & ab_group(ab) %in% "Antifungals"), + "Fungi", "Bacteria" + ) } # the organisms in the EUCAST rows must agree with the type of workbook # they come from @@ -2595,9 +2751,11 @@ merge_eucast_breakpoints <- function(clinical_breakpoints, breakpoints_eucast, e filter(type == "human") kept <- clinical_breakpoints |> anti_join(replaced, by = names(clinical_breakpoints)) - message("Replacing ", nrow(replaced), " WHONET-based human EUCAST rows (", - paste(sort(unique(paste(replaced$guideline, replaced$scope))), collapse = ", "), - ") with ", nrow(breakpoints_eucast), " rows from the EUCAST workbooks") + message( + "Replacing ", nrow(replaced), " WHONET-based human EUCAST rows (", + paste(sort(unique(paste(replaced$guideline, replaced$scope))), collapse = ", "), + ") with ", nrow(breakpoints_eucast), " rows from the EUCAST workbooks" + ) # rows without any breakpoint are only kept as the blocking rows of the # EUCAST workbooks (see "Blocking rows") kept |> diff --git a/data-raw/_reproduction_scripts/reproduction_of_intrinsic_resistant.R b/data-raw/_reproduction_scripts/reproduction_of_intrinsic_resistant.R index e84f5f0e3..9681cbb40 100644 --- a/data-raw/_reproduction_scripts/reproduction_of_intrinsic_resistant.R +++ b/data-raw/_reproduction_scripts/reproduction_of_intrinsic_resistant.R @@ -38,12 +38,12 @@ for (i in seq_len(nrow(antimicrobials))) { } int_resis <- interpretive_rules(int_resis, - interpretive_rules_df = subset( - AMR:::INTERPRETIVE_RULES_DF, - reference.rule_group %like% "Expected.* Phenotypes" - ), - overwrite = TRUE, - info = FALSE + interpretive_rules_df = subset( + AMR:::INTERPRETIVE_RULES_DF, + reference.rule_group %like% "Expected.* Phenotypes" + ), + overwrite = TRUE, + info = FALSE ) int_resis2 <- int_resis[, sapply(int_resis, function(x) any(!is.sir(x) | x == "R")), drop = FALSE] %>% @@ -63,8 +63,10 @@ all(int_resis3$ab %in% antimicrobials$ab) intrinsic_resistant <- int_resis3 -intrinsic_resistant$version <- paste(EUCAST_VERSION_EXPECTED_PHENOTYPES$`1.2`$title, - EUCAST_VERSION_EXPECTED_PHENOTYPES$`1.2`$version_txt) +intrinsic_resistant$version <- paste( + EUCAST_VERSION_EXPECTED_PHENOTYPES$`1.2`$title, + EUCAST_VERSION_EXPECTED_PHENOTYPES$`1.2`$version_txt +) usethis::use_data(intrinsic_resistant, internal = FALSE, overwrite = TRUE, version = 2, compress = "xz") rm(intrinsic_resistant) diff --git a/data-raw/_reproduction_scripts/reproduction_of_microorganisms.R b/data-raw/_reproduction_scripts/reproduction_of_microorganisms.R index 3f1f4ed3f..083fe4dca 100644 --- a/data-raw/_reproduction_scripts/reproduction_of_microorganisms.R +++ b/data-raw/_reproduction_scripts/reproduction_of_microorganisms.R @@ -53,7 +53,7 @@ # 5. Go to BacDive data base for the oxygen tolerance and cell shape. # Go to https://bacdive.dsmz.de/advsearch, filter 'Oxygen tolerance' or # 'Cell shape' on "*" and click Submit and click on the 'Download tabel as CSV' button. -# Last time these worked: +# Last time these worked: # - wget -O bacdive_oxygen_tolerance.csv 'https://bacdive.dsmz.de/advsearch/csv?fg%5B1%5D%5Bgc%5D=OR&fg%5B1%5D%5Bfl%5D%5B1%5D%5Bfd%5D=Oxygen+tolerance&fg%5B1%5D%5Bfl%5D%5B1%5D%5Bfv%5D=%2A&fg%5B1%5D%5Bfl%5D%5B1%5D%5Bfvd%5D=oxygen_tolerance-oxygen_tol-4' # - wget -O bacdive_cell_shape.csv 'https://bacdive.dsmz.de/advsearch/csv?fg%5B1%5D%5Bgc%5D=OR&fg%5B1%5D%5Bfl%5D%5B1%5D%5Bfd%5D=Cell+shape&fg%5B1%5D%5Bfl%5D%5B1%5D%5Bfv%5D=%2A&fg%5B1%5D%5Bfl%5D%5B1%5D%5Bfvd%5D=cell_morphology-cell_shape-2' # 6. Set these locations to the paths where the files are (or set the environment variable @@ -231,12 +231,12 @@ get_author_year <- function(ref) { # normalise Unicode to NFC (precomposed) so iconv can transliterate authors2 <- stringi::stri_trans_nfc(ref) # fix known encoding errors in source data - authors2 <- gsub("\u0092", "'", authors2) # Windows-1252 right quote - authors2 <- gsub("\u0091", "'", authors2) # Windows-1252 left quote - authors2 <- gsub("\u04AB", "\u00E7", authors2) # Cyrillic cedilla to Latin cedilla - authors2 <- gsub("[\u0400-\u04FF]", "", authors2) # remove remaining Cyrillic characters + authors2 <- gsub("\u0092", "'", authors2) # Windows-1252 right quote + authors2 <- gsub("\u0091", "'", authors2) # Windows-1252 left quote + authors2 <- gsub("\u04AB", "\u00E7", authors2) # Cyrillic cedilla to Latin cedilla + authors2 <- gsub("[\u0400-\u04FF]", "", authors2) # remove remaining Cyrillic characters authors2 <- iconv(authors2, from = "UTF-8", to = "ASCII//TRANSLIT") - + authors2 <- gsub(" ?\\(Approved Lists [0-9]+\\) ?", " ", authors2) authors2 <- gsub(" +", " ", authors2) authors2 <- trimws(authors2) @@ -251,15 +251,15 @@ get_author_year <- function(ref) { # replace parentheses with emend. to get the latest authors # authors2 <- gsub("(", " emend. ", authors2, fixed = TRUE) # authors2 <- gsub(")", "", authors2, fixed = TRUE) - + # remove any remaining parentheses authors2 <- gsub("[()]", "", authors2) authors2 <- gsub(" +", " ", authors2) authors2 <- trimws(authors2) - + # strip emend. and everything after it to retain the combination authority authors2 <- gsub(" ?emend[.]?.*", "", authors2) - + # get year from last 4 digits lastyear <- as.integer(gsub(".*([0-9]{4})$", "\\1", authors2)) # can never be later than now @@ -359,16 +359,19 @@ get_lpsn_and_author <- function(rank, name, tries = 3) { for (try in seq_len(tries)) { # be polite to the LPSN server Sys.sleep(0.1) - page_txt <- tryCatch({ - resp <- curl::curl_fetch_memory(url) - if (resp$status_code == 200) { - read_html(rawToChar(resp$content)) - } else { - # 404 is a valid answer, other codes (e.g. 429, 503) are worth a retry - not_found <- resp$status_code == 404 - NULL - } - }, error = function(e) NULL) + page_txt <- tryCatch( + { + resp <- curl::curl_fetch_memory(url) + if (resp$status_code == 200) { + read_html(rawToChar(resp$content)) + } else { + # 404 is a valid answer, other codes (e.g. 429, 503) are worth a retry + not_found <- resp$status_code == 404 + NULL + } + }, + error = function(e) NULL + ) if (!is.null(page_txt) || not_found) { break } @@ -1431,35 +1434,43 @@ taxonomy_gbif <- taxonomy_gbif %>% mutate( name_parts = strsplit(fullname, " "), rank_num = match(rank, rank_levels, nomatch = NA_integer_), - + # Step 1: parse the synonym's own name components from fullname kingdom = if_else(is.na(kingdom) & rank == "kingdom", - sapply(name_parts, `[`, 1L), kingdom), + sapply(name_parts, `[`, 1L), kingdom + ), phylum = if_else(is.na(phylum) & rank == "phylum", - sapply(name_parts, `[`, 1L), phylum), + sapply(name_parts, `[`, 1L), phylum + ), class = if_else(is.na(class) & rank == "class", - sapply(name_parts, `[`, 1L), class), + sapply(name_parts, `[`, 1L), class + ), order = if_else(is.na(order) & rank == "order", - sapply(name_parts, `[`, 1L), order), + sapply(name_parts, `[`, 1L), order + ), family = if_else(is.na(family) & rank == "family", - sapply(name_parts, `[`, 1L), family), + sapply(name_parts, `[`, 1L), family + ), genus = if_else(is.na(genus) & rank %in% c("genus", "species", "subspecies"), - sapply(name_parts, `[`, 1L), genus), + sapply(name_parts, `[`, 1L), genus + ), species = if_else(is.na(species) & rank %in% c("species", "subspecies"), - sapply(name_parts, `[`, 2L), species), + sapply(name_parts, `[`, 2L), species + ), subspecies = if_else(is.na(subspecies) & rank == "subspecies", - sapply(name_parts, `[`, 3L), subspecies), - + sapply(name_parts, `[`, 3L), subspecies + ), + # Step 2: fill domain and kingdom from the accepted name, only for ranks ABOVE the synonym's rank - domain = if_else(is.na(domain) & !is.na(acc_domain), acc_domain, domain), + domain = if_else(is.na(domain) & !is.na(acc_domain), acc_domain, domain), kingdom = if_else(is.na(kingdom) & !is.na(acc_kingdom) & rank_num > 1L, acc_kingdom, kingdom), # Step 3: phylum to family may only come from the accepted name if that is in the same genus # (or if the synonym is a genus or higher), otherwise from the synonym's own genus (see Step 4) same_lineage = rank_num <= 6L | (!is.na(acc_genus) & genus == acc_genus), - phylum = if_else(is.na(phylum) & !is.na(acc_phylum) & rank_num > 2L & same_lineage, acc_phylum, phylum), - class = if_else(is.na(class) & !is.na(acc_class) & rank_num > 3L & same_lineage, acc_class, class), - order = if_else(is.na(order) & !is.na(acc_order) & rank_num > 4L & same_lineage, acc_order, order), - family = if_else(is.na(family) & !is.na(acc_family) & rank_num > 5L & same_lineage, acc_family, family) + phylum = if_else(is.na(phylum) & !is.na(acc_phylum) & rank_num > 2L & same_lineage, acc_phylum, phylum), + class = if_else(is.na(class) & !is.na(acc_class) & rank_num > 3L & same_lineage, acc_class, class), + order = if_else(is.na(order) & !is.na(acc_order) & rank_num > 4L & same_lineage, acc_order, order), + family = if_else(is.na(family) & !is.na(acc_family) & rank_num > 5L & same_lineage, acc_family, family) ) %>% # Step 4: species in another genus than their accepted name get the taxonomy of their own genus left_join(accepted_genera, by = c("domain", "genus")) %>% @@ -1603,7 +1614,7 @@ taxonomy <- taxonomy_lpsn %>% ungroup() %>% # only keep unique species per domain distinct(domain, fullname, .keep_all = TRUE) %>% - arrange(fullname) %>% + arrange(fullname) %>% select(fullname, everything()) # get missing entries from existing microorganisms data set @@ -1845,12 +1856,12 @@ taxonomy <- taxonomy %>% filter(.resolve != "remove") %>% mutate( is_genus_rank = genus != "" & !is.na(best_domain) & rank %in% c("genus", "species", "subspecies"), - domain = if_else(genus != "" & !is.na(best_domain), best_domain, domain), + domain = if_else(genus != "" & !is.na(best_domain), best_domain, domain), kingdom = if_else(genus != "" & !is.na(best_kingdom) & best_kingdom != "", best_kingdom, kingdom), - phylum = if_else(is_genus_rank & best_phylum != "", best_phylum, phylum), - class = if_else(is_genus_rank & best_class != "", best_class, class), - order = if_else(is_genus_rank & best_order != "", best_order, order), - family = if_else(is_genus_rank & best_family != "", best_family, family) + phylum = if_else(is_genus_rank & best_phylum != "", best_phylum, phylum), + class = if_else(is_genus_rank & best_class != "", best_class, class), + order = if_else(is_genus_rank & best_order != "", best_order, order), + family = if_else(is_genus_rank & best_family != "", best_family, family) ) %>% select(-starts_with("best_"), -is_genus_rank, -.resolve) rm(genus_candidates, best_domain) @@ -1932,7 +1943,8 @@ taxonomy <- taxonomy %>% rank == "kingdom" ~ kingdom, rank == "domain" ~ domain, TRUE ~ paste(genus, species, subspecies) # already trimmed 7 lines up - ))) %>% + )) + ) %>% # keep the record of the most authoritative source: LPSN > MycoBank > GBIF > other mutate(sprio = source_prio(source)) %>% arrange(fullname, sprio) %>% @@ -2049,7 +2061,7 @@ fill_from_parent <- function(data, taxonomy, child_rank, parent_rank) { arrange(.data[[child_rank]], sprio) %>% distinct(.data[[child_rank]], .keep_all = TRUE) %>% select(all_of(c(child_rank, parent_rank))) - + data %>% rows_update(lookup, by = child_rank, unmatched = "ignore") } @@ -2091,7 +2103,7 @@ for (rank_name in c("family", "order", "class", "phylum", "kingdom")) { filter(rank != rank_name, .data[[rank_name]] != "") %>% distinct(.data[[rank_name]]) %>% pull() - + n_before <- nrow(taxonomy) taxonomy <- taxonomy %>% filter(!(rank == rank_name & !fullname %in% has_children)) @@ -2112,7 +2124,7 @@ gbif_bacteria <- which( taxonomy$domain == "Bacteria" & taxonomy$source %in% c("GBIF", "manually added", "inferred") & (taxonomy$rank %in% c("phylum", "class", "order", "family", "genus") | - (taxonomy$rank == "species" & taxonomy$genus %in% lpsn_genera)) + (taxonomy$rank == "species" & taxonomy$genus %in% lpsn_genera)) ) message(length(gbif_bacteria)) added <- 0 @@ -2175,18 +2187,19 @@ taxonomy$domain[taxonomy$domain == "(unknown kingdom)"] <- "(unknown domain)" # e.g., phylum above class "Bacilli" was still "Firmicutes" in 2023, should be "Bacillota" per LPSN rank_pairs <- tibble( child = c("genus", "family", "order", "class", "phylum"), - parent = c("family", "order", "class", "phylum", "kingdom") + parent = c("family", "order", "class", "phylum", "kingdom") ) for (d in unique(taxonomy$domain[taxonomy$domain != "(unknown domain)"])) { src <- if (d == "Fungi") "MycoBank" else "LPSN" message("Fixing GBIF taxonomy for domain ", d, " based on ", src, "...", - appendLF = FALSE) - + appendLF = FALSE + ) + for (i in seq_len(nrow(rank_pairs))) { - child_col <- rank_pairs$child[i] + child_col <- rank_pairs$child[i] parent_col <- rank_pairs$parent[i] - + # build lookup: for each child value in this domain, get the parent from the authoritative source lookup <- taxonomy %>% filter( @@ -2194,13 +2207,13 @@ for (d in unique(taxonomy$domain[taxonomy$domain != "(unknown domain)"])) { source == src, .data[[child_col]] != "" ) - + # special case: kingdom lookup excludes "Bacteria"/"Archaea" as kingdom values if (parent_col == "kingdom") { lookup <- lookup %>% filter(!kingdom %in% c("Bacteria", "Archaea")) } - + lookup <- lookup %>% # an empty parent in the authoritative source must never erase a known parent from GBIF # (e.g. MycoBank has no family for Mucor, GBIF has Mucoraceae) @@ -2209,7 +2222,7 @@ for (d in unique(taxonomy$domain[taxonomy$domain != "(unknown domain)"])) { arrange(rank != child_col) %>% distinct(.data[[child_col]], .keep_all = TRUE) %>% select(all_of(c(child_col, parent_col))) - + # join and overwrite taxonomy <- taxonomy %>% rows_update( @@ -2236,13 +2249,13 @@ taxonomy <- taxonomy %>% rank = case_when( rank %in% c("(unknown rank)", "species group") ~ rank, subspecies != "" ~ "subspecies", - species != "" ~ "species", - genus != "" ~ "genus", - family != "" ~ "family", - order != "" ~ "order", - class != "" ~ "class", - phylum != "" ~ "phylum", - kingdom != "" ~ "kingdom", + species != "" ~ "species", + genus != "" ~ "genus", + family != "" ~ "family", + order != "" ~ "order", + class != "" ~ "class", + phylum != "" ~ "phylum", + kingdom != "" ~ "kingdom", .default = NA_character_ ) ) @@ -2292,10 +2305,10 @@ taxonomy <- taxonomy %>% ) ) taxonomy$rank[taxonomy$kingdom == taxonomy$domain & - taxonomy$rank == "kingdom" & - taxonomy$domain %in% c("Bacteria", "Archaea")] <- "domain" + taxonomy$rank == "kingdom" & + taxonomy$domain %in% c("Bacteria", "Archaea")] <- "domain" taxonomy$kingdom[taxonomy$kingdom == taxonomy$domain & - taxonomy$rank == "domain"] <- "" + taxonomy$rank == "domain"] <- "" taxonomy <- taxonomy %>% arrange(fullname, source_prio(source), lpsn, mycobank, desc(gbif)) %>% @@ -2306,33 +2319,33 @@ taxonomy <- taxonomy %>% taxonomy <- taxonomy %>% mutate( .parent_fullname = case_when( - rank == "subspecies" ~ paste(genus, species), - rank == "species" ~ genus, - rank == "genus" & family != "" ~ family, - rank == "genus" & order != "" ~ order, - rank == "genus" & class != "" ~ class, - rank == "genus" & phylum != "" ~ phylum, - rank == "genus" ~ domain, - rank == "family" & order != "" ~ order, - rank == "family" & class != "" ~ class, - rank == "family" & phylum != "" ~ phylum, - rank == "family" ~ domain, - rank == "order" & class != "" ~ class, - rank == "order" & phylum != "" ~ phylum, - rank == "order" ~ domain, - rank == "class" & phylum != "" ~ phylum, - rank == "class" ~ domain, - rank == "phylum" & kingdom != "" ~ kingdom, - rank == "phylum" ~ domain, - rank == "kingdom" ~ domain, + rank == "subspecies" ~ paste(genus, species), + rank == "species" ~ genus, + rank == "genus" & family != "" ~ family, + rank == "genus" & order != "" ~ order, + rank == "genus" & class != "" ~ class, + rank == "genus" & phylum != "" ~ phylum, + rank == "genus" ~ domain, + rank == "family" & order != "" ~ order, + rank == "family" & class != "" ~ class, + rank == "family" & phylum != "" ~ phylum, + rank == "family" ~ domain, + rank == "order" & class != "" ~ class, + rank == "order" & phylum != "" ~ phylum, + rank == "order" ~ domain, + rank == "class" & phylum != "" ~ phylum, + rank == "class" ~ domain, + rank == "phylum" & kingdom != "" ~ kingdom, + rank == "phylum" ~ domain, + rank == "kingdom" ~ domain, .default = NA_character_ ) ) # Build lookup vectors: fullname -> id -lpsn_lookup <- setNames(taxonomy$lpsn, taxonomy$fullname) +lpsn_lookup <- setNames(taxonomy$lpsn, taxonomy$fullname) mycobank_lookup <- setNames(taxonomy$mycobank, taxonomy$fullname) -gbif_lookup <- setNames(taxonomy$gbif, taxonomy$fullname) +gbif_lookup <- setNames(taxonomy$gbif, taxonomy$fullname) taxonomy <- taxonomy %>% mutate( @@ -2676,12 +2689,12 @@ genus_ref <- taxonomy %>% filter(genus != "") %>% group_by(genus) %>% summarise( - .ref_domain = coalesce(first(domain[rank == "genus"]), first(domain)), - .ref_kingdom = coalesce(first(kingdom[rank == "genus"]), first(kingdom)), - .ref_phylum = consensus_value(phylum, rank, source, "genus"), - .ref_class = consensus_value(class, rank, source, "genus"), - .ref_order = consensus_value(order, rank, source, "genus"), - .ref_family = consensus_value(family, rank, source, "genus"), + .ref_domain = coalesce(first(domain[rank == "genus"]), first(domain)), + .ref_kingdom = coalesce(first(kingdom[rank == "genus"]), first(kingdom)), + .ref_phylum = consensus_value(phylum, rank, source, "genus"), + .ref_class = consensus_value(class, rank, source, "genus"), + .ref_order = consensus_value(order, rank, source, "genus"), + .ref_family = consensus_value(family, rank, source, "genus"), .groups = "drop" ) @@ -2689,13 +2702,13 @@ taxonomy <- taxonomy %>% left_join(genus_ref, by = "genus") %>% mutate( across_flag = rank != "genus" & genus != "" & fullname %unlike% "unknown", - domain = if_else(across_flag, .ref_domain, domain), - kingdom = if_else(across_flag, .ref_kingdom, kingdom), + domain = if_else(across_flag, .ref_domain, domain), + kingdom = if_else(across_flag, .ref_kingdom, kingdom), # also fill the genus record itself where it has no value - phylum = if_else((across_flag | (rank == "genus" & phylum == "")) & .ref_phylum != "", .ref_phylum, phylum), - class = if_else((across_flag | (rank == "genus" & class == "")) & .ref_class != "", .ref_class, class), - order = if_else((across_flag | (rank == "genus" & order == "")) & .ref_order != "", .ref_order, order), - family = if_else((across_flag | (rank == "genus" & family == "")) & .ref_family != "", .ref_family, family) + phylum = if_else((across_flag | (rank == "genus" & phylum == "")) & .ref_phylum != "", .ref_phylum, phylum), + class = if_else((across_flag | (rank == "genus" & class == "")) & .ref_class != "", .ref_class, class), + order = if_else((across_flag | (rank == "genus" & order == "")) & .ref_order != "", .ref_order, order), + family = if_else((across_flag | (rank == "genus" & family == "")) & .ref_family != "", .ref_family, family) ) %>% select(-starts_with(".ref_"), -across_flag) %>% arrange(fullname) @@ -2809,10 +2822,14 @@ plasmodia <- data.frame( status = "accepted", prevalence = 1.25 ) %>% - mutate(rank = ifelse(species == "", "genus", - ifelse(subspecies != "", "subspecies", - "species")), - fullname = trimws(paste(genus, species, subspecies))) + mutate( + rank = ifelse(species == "", "genus", + ifelse(subspecies != "", "subspecies", + "species" + ) + ), + fullname = trimws(paste(genus, species, subspecies)) + ) taxonomy <- taxonomy %>% filter(genus != "Plasmodium") %>% @@ -2898,8 +2915,10 @@ if (nrow(isospora_belli) == 1 && !"Cystoisospora belli" %in% taxonomy$fullname) status = "synonym", source = "manually added", ref = "", - across(any_of(c("lpsn", "lpsn_parent", "lpsn_renamed_to", "mycobank", "mycobank_parent", "mycobank_renamed_to", - "gbif", "gbif_parent")), ~NA_character_), + across(any_of(c( + "lpsn", "lpsn_parent", "lpsn_renamed_to", "mycobank", "mycobank_parent", "mycobank_renamed_to", + "gbif", "gbif_parent" + )), ~NA_character_), gbif_renamed_to = isospora_belli$gbif ) ) %>% @@ -3186,9 +3205,11 @@ taxonomy <- taxonomy %>% distinct(fullname, .keep_all = TRUE) %>% compute_prevalence() message("Restored ", nrow(restored), " released taxa (", nrow(taxonomy) - n_before, " records including their parents)") -rm(restore_registry, restore_renames, renamed, missing_released, homonyms_removed, retirements, new_retirements, source_names, older_homonyms, older_homonym_retirements, - released_records, genus_domains, conflicting, conflict_retirements, kingdom_of_phylum, lineage_of_genus, restored, - rank_order) +rm( + restore_registry, restore_renames, renamed, missing_released, homonyms_removed, retirements, new_retirements, source_names, older_homonyms, older_homonym_retirements, + released_records, genus_domains, conflicting, conflict_retirements, kingdom_of_phylum, lineage_of_genus, restored, + rank_order +) # Link orthographic variants without a current name ---------------------------------------------- @@ -3495,8 +3516,10 @@ if (nrow(new_retirements) > 0) { na = "" ) } -rm(no_current_name, lpsn_outcome, prokaryotes, to_remove, has_kept_children, outcome, removed, registry_now, - retirements_now, new_retirements) +rm( + no_current_name, lpsn_outcome, prokaryotes, to_remove, has_kept_children, outcome, removed, registry_now, + retirements_now, new_retirements +) # Fix genera that are synonyms while they contain accepted species -------------------------------- @@ -3617,8 +3640,10 @@ for (r in c("family", "order", "class", "phylum")) { new_record$status <- "accepted" new_record$source <- "manually added" new_record$ref <- NA_character_ - for (col in intersect(c("lpsn", "lpsn_parent", "lpsn_renamed_to", "mycobank", "mycobank_parent", - "mycobank_renamed_to", "gbif", "gbif_parent", "gbif_renamed_to"), colnames(new_record))) { + for (col in intersect(c( + "lpsn", "lpsn_parent", "lpsn_renamed_to", "mycobank", "mycobank_parent", + "mycobank_renamed_to", "gbif", "gbif_parent", "gbif_renamed_to" + ), colnames(new_record))) { new_record[[col]] <- NA_character_ } for (lf in c(r, lower)) new_record[[lf]] <- "" @@ -4022,7 +4047,7 @@ taxonomy <- taxonomy %>% filter(mo %unlike% "__") # keep unique taxonomy taxonomy <- bind_rows( - taxonomy %>% + taxonomy %>% filter(fullname %like% "unknown"), taxonomy %>% distinct(across(domain:subspecies), .keep_all = TRUE) %>% @@ -4489,7 +4514,8 @@ bacdive_shape_other <- taxonomy %>% morphology = case_when( fullname %like% "coccus" ~ "cocci", fullname %in% taxonomy$fullname[taxonomy$order %in% c("Enterobacterales", "Caryophanales", "Lactobacillales")] ~ morphology, - TRUE ~ paste("likely", morphology)) + TRUE ~ paste("likely", morphology) + ) ) %>% select(fullname, morphology) %>% distinct(fullname, .keep_all = TRUE) @@ -4883,7 +4909,7 @@ if (!is.null(mo_integrity_report(integrity_issues))) { # sets refer only to current names, except intrinsic_resistant, which lists synonyms on purpose) fix_old_mos <- function(dataset, new_ref, drop = FALSE, col = "mo", current = TRUE) { before <- dataset - + # the data sets contain codes of the development version mo_names <- microorganisms_dev$fullname[match(before[[col]], microorganisms_dev$mo)] # names of the development version that do not exist anymore, with their name in the new data set @@ -4922,20 +4948,24 @@ save_df <- function(...) { ) } microorganisms.codes <- fix_old_mos(AMR::microorganisms.codes, taxonomy, drop = TRUE) -if (!identical(microorganisms.codes, AMR::microorganisms.codes)) save_df(microorganisms.codes); rm(microorganisms.codes) +if (!identical(microorganisms.codes, AMR::microorganisms.codes)) save_df(microorganisms.codes) +rm(microorganisms.codes) clinical_breakpoints <- fix_old_mos(AMR::clinical_breakpoints, taxonomy) -if (!identical(clinical_breakpoints, AMR::clinical_breakpoints)) save_df(clinical_breakpoints); rm(clinical_breakpoints) +if (!identical(clinical_breakpoints, AMR::clinical_breakpoints)) save_df(clinical_breakpoints) +rm(clinical_breakpoints) example_isolates <- fix_old_mos(AMR::example_isolates, taxonomy) -if (!identical(example_isolates, AMR::example_isolates)) save_df(example_isolates); rm(example_isolates) +if (!identical(example_isolates, AMR::example_isolates)) save_df(example_isolates) +rm(example_isolates) # (intrinsic_resistant is not updated here: it is computed from the new data set afterwards, see # data-raw/_reproduction_scripts/reproduction_of_intrinsic_resistant.R) microorganisms.groups <- fix_old_mos(AMR::microorganisms.groups, taxonomy, col = "mo") microorganisms.groups <- fix_old_mos(microorganisms.groups, taxonomy, col = "mo_group") -if (!identical(microorganisms.groups, AMR::microorganisms.groups)) save_df(microorganisms.groups); rm(microorganisms.groups) +if (!identical(microorganisms.groups, AMR::microorganisms.groups)) save_df(microorganisms.groups) +rm(microorganisms.groups) # *** Save to package *** ------------------------------------------------------------------------- diff --git a/data-raw/_reproduction_scripts/run_after_microorganisms_build.R b/data-raw/_reproduction_scripts/run_after_microorganisms_build.R index 813e2b456..1f67765ac 100644 --- a/data-raw/_reproduction_scripts/run_after_microorganisms_build.R +++ b/data-raw/_reproduction_scripts/run_after_microorganisms_build.R @@ -56,12 +56,12 @@ step("microorganisms.groups", "data-raw/_reproduction_scripts/reproduction_of_mi # 2. EUCAST breakpoints, merged into clinical_breakpoints (as at the end of reproduction_of_clinical_breakpoints.R) merge_script <- tempfile(fileext = ".R") writeLines(c( - 'devtools::load_all()', - 'library(dplyr, warn.conflicts = FALSE)', + "devtools::load_all()", + "library(dplyr, warn.conflicts = FALSE)", 'source("data-raw/_reproduction_scripts/reproduction_of_clinical_breakpoints_eucast.R")', - '# the rank of an organism can have changed with the new data set', - 'breakpoints_now <- clinical_breakpoints %>%', - ' mutate(rank_index = case_when(', + "# the rank of an organism can have changed with the new data set", + "breakpoints_now <- clinical_breakpoints %>%", + " mutate(rank_index = case_when(", ' mo_rank(mo, keep_synonyms = TRUE) %like% "(infra|sub)" ~ 1,', ' mo_rank(mo, keep_synonyms = TRUE) == "species" ~ 2,', ' mo_rank(mo, keep_synonyms = TRUE) == "species group" ~ 2.5,', @@ -69,9 +69,9 @@ writeLines(c( ' mo_rank(mo, keep_synonyms = TRUE) == "family" ~ 4,', ' mo_rank(mo, keep_synonyms = TRUE) == "order" ~ 5,', ' mo != "UNKNOWN" ~ 6,', - ' TRUE ~ 7', + " TRUE ~ 7", ' ) + if_else(is.na(breakpoint_S) & is.na(breakpoint_R) & guideline %like% "EUCAST", 0.1, 0))', - 'clinical_breakpoints <- merge_eucast_breakpoints(breakpoints_now, breakpoints_eucast, eucast_coverage)', + "clinical_breakpoints <- merge_eucast_breakpoints(breakpoints_now, breakpoints_eucast, eucast_coverage)", 'usethis::use_data(clinical_breakpoints, overwrite = TRUE, compress = "xz", version = 2)' ), merge_script) step("clinical_breakpoints (EUCAST)", merge_script) diff --git a/data-raw/wisca_test/parameters_amr.R b/data-raw/wisca_test/parameters_amr.R index 770e6cf80..aab80b06f 100644 --- a/data-raw/wisca_test/parameters_amr.R +++ b/data-raw/wisca_test/parameters_amr.R @@ -1,622 +1,622 @@ # Copyright (c) [2022] [Larisse Bolton] -wisca_params <- function(x, antibiotic_in, pathogen_in, analysis, exclude, isolate_first, susceptible_I, infection_in,infection_full){ +wisca_params <- function(x, antibiotic_in, pathogen_in, analysis, exclude, isolate_first, susceptible_I, infection_in, infection_full) { # Isolate the type of syndrome you would like to investigate - if (infection_in != ""){ - x <- x %>% - filter(infection_type == infection_in) + if (infection_in != "") { + x <- x %>% + filter(infection_type == infection_in) } else { x <- x } - + # Define antibiotic regimens under investigation from "antimicrobials" dataset - antibiotic_df <- function(abo_in){ - mono_ab <- str_to_title(abo_in[!str_detect(abo_in,fixed("+"))]) #identify single antimicrobials - + antibiotic_df <- function(abo_in) { + mono_ab <- str_to_title(abo_in[!str_detect(abo_in, fixed("+"))]) # identify single antimicrobials + mono_antibiotic_x_set <- data.frame() - for (j in 1:length(mono_ab)){ #generate dataframe for single antimicrobials with abbreviations and fullnames + for (j in 1:length(mono_ab)) { # generate dataframe for single antimicrobials with abbreviations and fullnames mono_x_name <- ab_name(mono_ab[j], only_first = TRUE) mono_x_ab <- as.ab(mono_x_name) - mono_antibiotic <- subset(antimicrobials, antimicrobials$ab %in% mono_x_ab)[,c("ab","name")] - mono_antibiotic_x_set <- rbind.data.frame(mono_antibiotic_x_set,mono_antibiotic, row.names = NULL) + mono_antibiotic <- subset(antimicrobials, antimicrobials$ab %in% mono_x_ab)[, c("ab", "name")] + mono_antibiotic_x_set <- rbind.data.frame(mono_antibiotic_x_set, mono_antibiotic, row.names = NULL) } - names(mono_antibiotic_x_set) <- c("ab1","namerx") + names(mono_antibiotic_x_set) <- c("ab1", "namerx") mono_antibiotic_x_set$ab1 <- as.character(mono_antibiotic_x_set$ab1) - - - comb_ab <- str_to_title(abo_in[str_detect(abo_in,fixed("+"))]) #identify combination regimens - if(length(comb_ab) > 0){ - - comb_antibiotic_x_total <- data.frame() - for (jj in 1:length(comb_ab)){ #generate dataframe for combination antimicrobials with abbreviations and fullnames + + + comb_ab <- str_to_title(abo_in[str_detect(abo_in, fixed("+"))]) # identify combination regimens + if (length(comb_ab) > 0) { + comb_antibiotic_x_total <- data.frame() + for (jj in 1:length(comb_ab)) { # generate dataframe for combination antimicrobials with abbreviations and fullnames comb_ab_sep <- unlist(str_split(comb_ab[jj], fixed("+"))) comb_antibiotic_x_pre <- data.frame(x = rep(0, times = 2), y = rep(0, times = 2)) - for (ii in 1:length(comb_ab_sep)){ + for (ii in 1:length(comb_ab_sep)) { comb_x_name <- ab_name(comb_ab_sep[ii], only_first = TRUE) comb_x_ab <- as.ab(comb_x_name) - comb_antibiotic <- subset(antimicrobials, antimicrobials$ab %in% comb_x_ab)[,c("ab","name")] - comb_antibiotic_x_pre[ii,] <- comb_antibiotic + comb_antibiotic <- subset(antimicrobials, antimicrobials$ab %in% comb_x_ab)[, c("ab", "name")] + comb_antibiotic_x_pre[ii, ] <- comb_antibiotic names(comb_antibiotic_x_pre) <- names(comb_antibiotic) } comb_antibiotic_x <- pivot_wider(comb_antibiotic_x_pre, names_from = name, values_from = ab) comb_antibiotic_x_set <- comb_antibiotic_x %>% mutate(namerx = str_flatten(str_c(names(comb_antibiotic_x), collapse = "+"))) - new_ab <- sapply(X = as.character(1:(ncol(comb_antibiotic_x_set)-1)), FUN = function(x){str_flatten(str_c("ab",x))}) - names(comb_antibiotic_x_set)[1:(ncol(comb_antibiotic_x_set)-1)] <- new_ab - names(comb_antibiotic_x_set)[ncol(comb_antibiotic_x_set)]<- "namerx" - comb_antibiotic_x_total <-rbind.data.frame(comb_antibiotic_x_total, comb_antibiotic_x_set, row.names = NULL) + new_ab <- sapply(X = as.character(1:(ncol(comb_antibiotic_x_set) - 1)), FUN = function(x) { + str_flatten(str_c("ab", x)) + }) + names(comb_antibiotic_x_set)[1:(ncol(comb_antibiotic_x_set) - 1)] <- new_ab + names(comb_antibiotic_x_set)[ncol(comb_antibiotic_x_set)] <- "namerx" + comb_antibiotic_x_total <- rbind.data.frame(comb_antibiotic_x_total, comb_antibiotic_x_set, row.names = NULL) } - - - - antibiotic_x_set <- full_join(x= mono_antibiotic_x_set,y = comb_antibiotic_x_total) #generate full antibiotic dataset for analysis - antibiotic_x_set <- select(antibiotic_x_set, starts_with("ab"),starts_with("namerx")) - + + + antibiotic_x_set <- full_join(x = mono_antibiotic_x_set, y = comb_antibiotic_x_total) # generate full antibiotic dataset for analysis + antibiotic_x_set <- select(antibiotic_x_set, starts_with("ab"), starts_with("namerx")) } else { antibiotic_x_set <- mono_antibiotic_x_set } return(antibiotic_x_set) } - - antibiotic_rx <- antibiotic_df(abo_in = antibiotic_in) #full dataframe with antibiotic regimens - - - #if the dataset names are in different format to built-in set - if ((length(names(x)[sapply(names(x), function(x1){any(str_detect(x1,"[A-Z]$") & !(x1 %in% antimicrobials$ab) & !(x1 %in% antimicrobials$name))})])>0)){ - names(x)[which(str_detect(names(x),"[a-z]+") & !str_detect(names(x),"fullname") & !str_detect(names(x),"mo"))] <- str_to_upper(names(x)[which(str_detect(names(x),"[a-z]+") & !str_detect(names(x),"fullname") & !str_detect(names(x),"mo"))]) - names(x)[which(str_detect(names(x),"^ORG") & str_detect(names(x),"NAME$"))] <- "fullname" - names(x)[which(str_detect(names(x),"^ORG") & str_detect(names(x),"CODE$"))] <- "organism" - names(x)[which(str_detect(names(x),"^DATE") & str_detect(names(x),"CULTURE$") | str_detect(names(x),"^DATE") & str_detect(names(x),"SPECIMEN"))] <- "date" - names(x)[which(str_detect(names(x),"^EPISODE") | str_detect(names(x),"^PAT"))] <- "patient" - names(x)[which(str_detect(names(x),"^WARD"))] <- "ward" - names(x)[which(str_detect(names(x),"^HOSP"))] <- "hospital" - names(x)[which(str_detect(names(x),"DATE") & (str_detect(names(x),"REGISTRATION")))] <- "date" + antibiotic_rx <- antibiotic_df(abo_in = antibiotic_in) # full dataframe with antibiotic regimens + + + # if the dataset names are in different format to built-in set + if ((length(names(x)[sapply(names(x), function(x1) { + any(str_detect(x1, "[A-Z]$") & !(x1 %in% antimicrobials$ab) & !(x1 %in% antimicrobials$name)) + })]) > 0)) { + names(x)[which(str_detect(names(x), "[a-z]+") & !str_detect(names(x), "fullname") & !str_detect(names(x), "mo"))] <- str_to_upper(names(x)[which(str_detect(names(x), "[a-z]+") & !str_detect(names(x), "fullname") & !str_detect(names(x), "mo"))]) + names(x)[which(str_detect(names(x), "^ORG") & str_detect(names(x), "NAME$"))] <- "fullname" + names(x)[which(str_detect(names(x), "^ORG") & str_detect(names(x), "CODE$"))] <- "organism" + names(x)[which(str_detect(names(x), "^DATE") & str_detect(names(x), "CULTURE$") | str_detect(names(x), "^DATE") & str_detect(names(x), "SPECIMEN"))] <- "date" + names(x)[which(str_detect(names(x), "^EPISODE") | str_detect(names(x), "^PAT"))] <- "patient" + names(x)[which(str_detect(names(x), "^WARD"))] <- "ward" + names(x)[which(str_detect(names(x), "^HOSP"))] <- "hospital" + names(x)[which(str_detect(names(x), "DATE") & (str_detect(names(x), "REGISTRATION")))] <- "date" } - - #remove any duplicated variables - if (any(duplicated(names(x)))){ - x <- x[,-max(which(names(x) == names(x)[which(duplicated(names(x)))]))] + + # remove any duplicated variables + if (any(duplicated(names(x)))) { + x <- x[, -max(which(names(x) == names(x)[which(duplicated(names(x)))]))] } else { x <- x } - - x <- arrange(x,"date") #arrange in increasing date - - #if your dataset does not have an episode identifier - if (length(names(x)[sapply(names(x), function(x1){any(str_detect(x1,"patient"))})]) == 0){ - x$patient <- seq(1,nrow(x),1) + + x <- arrange(x, "date") # arrange in increasing date + + # if your dataset does not have an episode identifier + if (length(names(x)[sapply(names(x), function(x1) { + any(str_detect(x1, "patient")) + })]) == 0) { + x$patient <- seq(1, nrow(x), 1) } - - - - #find demographic data within dataset - micro_df_ind <- which(sapply(x,function(y) any(str_detect(y,"^S$"))|any(str_detect(y,"^R$"))|any(str_detect(y,"^SENSITIVE$"))| any(str_detect(y,"^RESISTANT$"))) == TRUE) - micro_df <- names(x)[micro_df_ind]#column names for susceptibility data - demograph_df <- names(x)[which(!names(x) %in% micro_df)] #column names for demographic or organism data - - #Dataset required to contain both mo and fullname - if ("mo" %in% names(x)){ + + + # find demographic data within dataset + micro_df_ind <- which(sapply(x, function(y) any(str_detect(y, "^S$")) | any(str_detect(y, "^R$")) | any(str_detect(y, "^SENSITIVE$")) | any(str_detect(y, "^RESISTANT$"))) == TRUE) + micro_df <- names(x)[micro_df_ind] # column names for susceptibility data + demograph_df <- names(x)[which(!names(x) %in% micro_df)] # column names for demographic or organism data + + # Dataset required to contain both mo and fullname + if ("mo" %in% names(x)) { # If mo included but not fullname: x <- x %>% mutate(mo = as.mo(mo), keep_synonyms = TRUE) test_isolates_pre <- x %>% - mutate(across(.cols = all_of(demograph_df),~ str_to_title(.x))) %>% - mutate(mo = toupper(mo)) - if ("fullname" %in% names(x)){ - test_isolates <- test_isolates_pre[,c(demograph_df)] + mutate(across(.cols = all_of(demograph_df), ~ str_to_title(.x))) %>% + mutate(mo = toupper(mo)) + if ("fullname" %in% names(x)) { + test_isolates <- test_isolates_pre[, c(demograph_df)] } else { - test_isolates <- left_join_microorganisms(x = test_isolates_pre, by = "mo")[,c(demograph_df,"fullname")] #add in fullname + test_isolates <- left_join_microorganisms(x = test_isolates_pre, by = "mo")[, c(demograph_df, "fullname")] # add in fullname } - test_isolates <- test_isolates %>% #remove bugs to be excluded and final style conversions + test_isolates <- test_isolates %>% # remove bugs to be excluded and final style conversions filter(!(fullname %in% exclude)) %>% mutate(fullname = str_to_title(fullname)) - - rx_abo <- x %>% #from orginal dataset - filter(mo %in% test_isolates$mo) %>% #select only those bugs that should be included - distinct(date, patient, mo, .keep_all = TRUE) #ensure that there are no duplications - rx_regs <- names(rx_abo)[!(names(rx_abo) %in% demograph_df)] #extract susceptibility data - - if (any(str_detect(rx_regs,fixed("+")))){#if combinations have already been accounted for in susceptibility profiling + + rx_abo <- x %>% # from orginal dataset + filter(mo %in% test_isolates$mo) %>% # select only those bugs that should be included + distinct(date, patient, mo, .keep_all = TRUE) # ensure that there are no duplications + rx_regs <- names(rx_abo)[!(names(rx_abo) %in% demograph_df)] # extract susceptibility data + + if (any(str_detect(rx_regs, fixed("+")))) { # if combinations have already been accounted for in susceptibility profiling rx_regs_ind <- which(!(names(rx_abo) %in% demograph_df)) # extract susceptibility data - rx_regs_comb <- rx_regs[str_detect(rx_regs,fixed("+"))]# find combination regimen variables + rx_regs_comb <- rx_regs[str_detect(rx_regs, fixed("+"))] # find combination regimen variables rx_regs_comb_x_total <- data.frame() - - for (jj in 1:length(rx_regs_comb)){ # for every combination regimen - rx_regs_comb_sep <- str_remove_all(unlist(str_split(rx_regs_comb[jj], fixed("+"))),"[[:punct:]]") #extract separate antimicrobials included in regimen + + for (jj in 1:length(rx_regs_comb)) { # for every combination regimen + rx_regs_comb_sep <- str_remove_all(unlist(str_split(rx_regs_comb[jj], fixed("+"))), "[[:punct:]]") # extract separate antimicrobials included in regimen rx_regs_comb_pre <- data.frame(x = rep(0, times = 2), y = rep(0, times = 2)) - for (ii in 1:length(rx_regs_comb_sep)){ #for every antibiotic in the combination regimen - rx_regs_comb_name <- ab_name(rx_regs_comb_sep[ii], only_first = TRUE) #extract their antibiotic name - rx_regs_comb_ab <- as.ab(rx_regs_comb_name) #convert antibiotic name to abbreviation - rx_regs_comb_antibiotic <- subset(antimicrobials, antimicrobials$ab %in% rx_regs_comb_ab)[,c("ab","name")] - rx_regs_comb_pre[ii,] <- rx_regs_comb_antibiotic + for (ii in 1:length(rx_regs_comb_sep)) { # for every antibiotic in the combination regimen + rx_regs_comb_name <- ab_name(rx_regs_comb_sep[ii], only_first = TRUE) # extract their antibiotic name + rx_regs_comb_ab <- as.ab(rx_regs_comb_name) # convert antibiotic name to abbreviation + rx_regs_comb_antibiotic <- subset(antimicrobials, antimicrobials$ab %in% rx_regs_comb_ab)[, c("ab", "name")] + rx_regs_comb_pre[ii, ] <- rx_regs_comb_antibiotic names(rx_regs_comb_pre) <- names(rx_regs_comb_antibiotic) } rx_regs_comb_x <- pivot_wider(rx_regs_comb_pre, names_from = name, values_from = ab) rx_regs_comb_x_set <- rx_regs_comb_x %>% - mutate(namerx = str_flatten(str_c(names(rx_regs_comb_x), collapse = "+"))) #generate new antimicrobials table - rx_regs_new_ab <- sapply(X = as.character(1:(ncol(rx_regs_comb_x_set)-1)), FUN = function(x){str_flatten(str_c("ab",x))}) - names(rx_regs_comb_x_set)[1:(ncol(rx_regs_comb_x_set)-1)] <- rx_regs_new_ab - names(rx_regs_comb_x_set)[ncol(rx_regs_comb_x_set)]<- "namerx" - rx_regs_comb_x_total <-rbind.data.frame(rx_regs_comb_x_total, rx_regs_comb_x_set, row.names = NULL) + mutate(namerx = str_flatten(str_c(names(rx_regs_comb_x), collapse = "+"))) # generate new antimicrobials table + rx_regs_new_ab <- sapply(X = as.character(1:(ncol(rx_regs_comb_x_set) - 1)), FUN = function(x) { + str_flatten(str_c("ab", x)) + }) + names(rx_regs_comb_x_set)[1:(ncol(rx_regs_comb_x_set) - 1)] <- rx_regs_new_ab + names(rx_regs_comb_x_set)[ncol(rx_regs_comb_x_set)] <- "namerx" + rx_regs_comb_x_total <- rbind.data.frame(rx_regs_comb_x_total, rx_regs_comb_x_set, row.names = NULL) } - - rx_regs_comb_rename <- select(rx_regs_comb_x_total,starts_with("ab")) #extract all antibiotic abbreviations - #regenerate variable names for dataset + + rx_regs_comb_rename <- select(rx_regs_comb_x_total, starts_with("ab")) # extract all antibiotic abbreviations + # regenerate variable names for dataset suppressWarnings({ - for (k in 1:nrow(rx_regs_comb_x_total)){ - rx_regs_comb_rename_2 <- unlist(rx_regs_comb_rename[k,]) + for (k in 1:nrow(rx_regs_comb_x_total)) { + rx_regs_comb_rename_2 <- unlist(rx_regs_comb_rename[k, ]) rx_regs_comb_rename_vec <- str_flatten(str_c(rx_regs_comb_rename_2, collapse = "+")) names(rx_abo)[names(rx_abo) == rx_regs_comb[k]] <- rx_regs_comb_rename_vec - } }) - names(rx_abo)[!(str_detect(names(rx_abo),fixed("+"))) & !(names(rx_abo) %in% demograph_df)] <- - as.ab(names(rx_abo)[!(str_detect(names(rx_abo),fixed("+"))) & !(names(rx_abo) %in% demograph_df)]) - names(rx_abo)[which(duplicated(names(rx_abo)))] <- str_c(names(rx_abo)[which(duplicated(names(rx_abo)))],".x") - rx_abo_upd <- left_join_microorganisms(x = rx_abo, by = "mo")[,c(names(rx_abo),"fullname")] - + names(rx_abo)[!(str_detect(names(rx_abo), fixed("+"))) & !(names(rx_abo) %in% demograph_df)] <- + as.ab(names(rx_abo)[!(str_detect(names(rx_abo), fixed("+"))) & !(names(rx_abo) %in% demograph_df)]) + names(rx_abo)[which(duplicated(names(rx_abo)))] <- str_c(names(rx_abo)[which(duplicated(names(rx_abo)))], ".x") + rx_abo_upd <- left_join_microorganisms(x = rx_abo, by = "mo")[, c(names(rx_abo), "fullname")] } else { names(rx_abo)[!(names(rx_abo) %in% demograph_df)] <- as.ab(names(rx_abo)[!(names(rx_abo) %in% demograph_df)]) - names(rx_abo)[which(duplicated(names(rx_abo)))] <- str_c(names(rx_abo)[which(duplicated(names(rx_abo)))],".x") - rx_abo_upd <- left_join_microorganisms(x = rx_abo, by = "mo")[,c(names(rx_abo),"fullname")] - - } + names(rx_abo)[which(duplicated(names(rx_abo)))] <- str_c(names(rx_abo)[which(duplicated(names(rx_abo)))], ".x") + rx_abo_upd <- left_join_microorganisms(x = rx_abo, by = "mo")[, c(names(rx_abo), "fullname")] + } } else { - #If fullname included in dataset: + # If fullname included in dataset: test_isolates_pre <- x %>% - mutate(across(.cols = all_of(demograph_df),~ str_to_title(.x))) %>% + mutate(across(.cols = all_of(demograph_df), ~ str_to_title(.x))) %>% filter(!(fullname %in% unique(exclude))) print(nrow(test_isolates_pre)) - test_isolates <- left_join_microorganisms(x = test_isolates_pre, by = "fullname")[,c(demograph_df,"mo")] - test_isolates$fullname <- str_to_title(test_isolates$fullname) + test_isolates <- left_join_microorganisms(x = test_isolates_pre, by = "fullname")[, c(demograph_df, "mo")] + test_isolates$fullname <- str_to_title(test_isolates$fullname) test_isolates$mo <- toupper(test_isolates$mo) - + rx_abo <- x %>% mutate(fullname = str_to_title(fullname)) %>% - filter(!(fullname %in% unique(exclude))) %>% + filter(!(fullname %in% unique(exclude))) %>% distinct(date, patient, fullname, .keep_all = TRUE) - rx_regs <- names(rx_abo)[!(names(rx_abo) %in% demograph_df)] #susceptibility data - - if (any(str_detect(rx_regs,fixed("+")))){#if combinations have already been accounted for + rx_regs <- names(rx_abo)[!(names(rx_abo) %in% demograph_df)] # susceptibility data + + if (any(str_detect(rx_regs, fixed("+")))) { # if combinations have already been accounted for rx_regs_ind <- which(!(names(rx_abo) %in% demograph_df)) - rx_regs_comb <- rx_regs[str_detect(rx_regs,fixed("+"))] + rx_regs_comb <- rx_regs[str_detect(rx_regs, fixed("+"))] rx_regs_comb_x_total <- data.frame() - - for (jj in 1:length(rx_regs_comb)){ - rx_regs_comb_sep <- str_remove_all(unlist(str_split(rx_regs_comb[jj], fixed("+"))),"[[:punct:]]") + + for (jj in 1:length(rx_regs_comb)) { + rx_regs_comb_sep <- str_remove_all(unlist(str_split(rx_regs_comb[jj], fixed("+"))), "[[:punct:]]") rx_regs_comb_pre <- data.frame(x = rep(0, times = 2), y = rep(0, times = 2)) - for (ii in 1:length(rx_regs_comb_sep)){ + for (ii in 1:length(rx_regs_comb_sep)) { rx_regs_comb_name <- ab_name(rx_regs_comb_sep[ii], only_first = TRUE) rx_regs_comb_ab <- as.ab(rx_regs_comb_name) - rx_regs_comb_antibiotic <- subset(antimicrobials, antimicrobials$ab %in% rx_regs_comb_ab)[,c("ab","name")] - rx_regs_comb_pre[ii,] <- rx_regs_comb_antibiotic + rx_regs_comb_antibiotic <- subset(antimicrobials, antimicrobials$ab %in% rx_regs_comb_ab)[, c("ab", "name")] + rx_regs_comb_pre[ii, ] <- rx_regs_comb_antibiotic names(rx_regs_comb_pre) <- names(rx_regs_comb_antibiotic) } rx_regs_comb_x <- pivot_wider(rx_regs_comb_pre, names_from = name, values_from = ab) rx_regs_comb_x_set <- rx_regs_comb_x %>% mutate(namerx = str_flatten(str_c(names(rx_regs_comb_x), collapse = "+"))) - rx_regs_new_ab <- sapply(X = as.character(1:(ncol(rx_regs_comb_x_set)-1)), FUN = function(x){str_flatten(str_c("ab",x))}) - names(rx_regs_comb_x_set)[1:(ncol(rx_regs_comb_x_set)-1)] <- rx_regs_new_ab - names(rx_regs_comb_x_set)[ncol(rx_regs_comb_x_set)]<- "namerx" - rx_regs_comb_x_total <-rbind.data.frame(rx_regs_comb_x_total, rx_regs_comb_x_set, row.names = NULL) + rx_regs_new_ab <- sapply(X = as.character(1:(ncol(rx_regs_comb_x_set) - 1)), FUN = function(x) { + str_flatten(str_c("ab", x)) + }) + names(rx_regs_comb_x_set)[1:(ncol(rx_regs_comb_x_set) - 1)] <- rx_regs_new_ab + names(rx_regs_comb_x_set)[ncol(rx_regs_comb_x_set)] <- "namerx" + rx_regs_comb_x_total <- rbind.data.frame(rx_regs_comb_x_total, rx_regs_comb_x_set, row.names = NULL) } - - rx_regs_comb_rename <- select(rx_regs_comb_x_total,starts_with("ab")) - + + rx_regs_comb_rename <- select(rx_regs_comb_x_total, starts_with("ab")) + suppressWarnings({ - for (k in 1:nrow(rx_regs_comb_x_total)){ - rx_regs_comb_rename_2 <- unlist(rx_regs_comb_rename[k,]) + for (k in 1:nrow(rx_regs_comb_x_total)) { + rx_regs_comb_rename_2 <- unlist(rx_regs_comb_rename[k, ]) rx_regs_comb_rename_vec <- str_flatten(str_c(rx_regs_comb_rename_2, collapse = "+")) names(rx_abo)[names(rx_abo) == rx_regs_comb[k]] <- rx_regs_comb_rename_vec } }) - names(rx_abo)[!(str_detect(names(rx_abo),fixed("+"))) & !(names(rx_abo) %in% demograph_df)] <- - as.ab(names(rx_abo)[!(str_detect(names(rx_abo),fixed("+"))) & !(names(rx_abo) %in% demograph_df)]) - names(rx_abo)[which(duplicated(names(rx_abo)))] <- str_c(names(rx_abo)[which(duplicated(names(rx_abo)))],".x") - rx_abo_upd <- left_join_microorganisms(x = rx_abo, by = "fullname")[,c(names(rx_abo),"mo")] - + names(rx_abo)[!(str_detect(names(rx_abo), fixed("+"))) & !(names(rx_abo) %in% demograph_df)] <- + as.ab(names(rx_abo)[!(str_detect(names(rx_abo), fixed("+"))) & !(names(rx_abo) %in% demograph_df)]) + names(rx_abo)[which(duplicated(names(rx_abo)))] <- str_c(names(rx_abo)[which(duplicated(names(rx_abo)))], ".x") + rx_abo_upd <- left_join_microorganisms(x = rx_abo, by = "fullname")[, c(names(rx_abo), "mo")] } else { names(rx_abo)[!(names(rx_abo) %in% demograph_df)] <- as.ab(names(rx_abo)[!(names(rx_abo) %in% demograph_df)]) - names(rx_abo)[which(duplicated(names(rx_abo)))] <- str_c(names(rx_abo)[which(duplicated(names(rx_abo)))],".x") - rx_abo_upd <- left_join_microorganisms(x = rx_abo, by = "fullname")[,c(names(rx_abo),"mo")] - - } + names(rx_abo)[which(duplicated(names(rx_abo)))] <- str_c(names(rx_abo)[which(duplicated(names(rx_abo)))], ".x") + rx_abo_upd <- left_join_microorganisms(x = rx_abo, by = "fullname")[, c(names(rx_abo), "mo")] + } } - - + + rx_abo_upd$fullname <- str_to_title(rx_abo_upd$fullname) - - - #generate new dataset with demographic information and only antimicrobials under investigation - rx_1 <- select(antibiotic_rx,starts_with("ab")) #all antimicrobials + + + # generate new dataset with demographic information and only antimicrobials under investigation + rx_1 <- select(antibiotic_rx, starts_with("ab")) # all antimicrobials rx_df <- test_isolates - var_date <- names(rx_df)[str_detect(names(rx_df),"date")] + var_date <- names(rx_df)[str_detect(names(rx_df), "date")] rx_df[[var_date]] <- ymd(rx_df[[var_date]]) - var_patient <- names(rx_df)[str_detect(names(rx_df),"patient")] + var_patient <- names(rx_df)[str_detect(names(rx_df), "patient")] rx_df[[var_patient]] <- toupper(rx_df[[var_patient]]) - + names_vec <- vector() suppressWarnings({ - for (k in 1:nrow(rx_1)){ - rx_2 <- unlist(rx_1[k,][!is.na(str_extract(rx_1[k,],"[A-Z]+"))]) - if ((length(rx_2) > 1) & !(str_flatten(str_c(rx_2, collapse = "+")) %in% names(rx_abo_upd))){ # if more than one antibiotic in regimen and susceptibility of the combination not considered - rx_df <- merge(x = rx_df, y = rx_abo_upd[,c("date","patient","mo",rx_2)], by = c("date","patient","mo")) #then bind separate antimicrobials in regimen - #if prior individual antibiotic was added, suffix will be generated - for (jj in 1:length(rx_2)){ - if (any(str_detect(names(rx_df),paste0(rx_2[jj],".y")))){ - rx_df[[paste0(rx_2[jj],".y")]] <- str_trim(rx_df[[paste0(rx_2[jj],".y")]]) + for (k in 1:nrow(rx_1)) { + rx_2 <- unlist(rx_1[k, ][!is.na(str_extract(rx_1[k, ], "[A-Z]+"))]) + if ((length(rx_2) > 1) & !(str_flatten(str_c(rx_2, collapse = "+")) %in% names(rx_abo_upd))) { # if more than one antibiotic in regimen and susceptibility of the combination not considered + rx_df <- merge(x = rx_df, y = rx_abo_upd[, c("date", "patient", "mo", rx_2)], by = c("date", "patient", "mo")) # then bind separate antimicrobials in regimen + # if prior individual antibiotic was added, suffix will be generated + for (jj in 1:length(rx_2)) { + if (any(str_detect(names(rx_df), paste0(rx_2[jj], ".y")))) { + rx_df[[paste0(rx_2[jj], ".y")]] <- str_trim(rx_df[[paste0(rx_2[jj], ".y")]]) } else { rx_df[[rx_2[jj]]] <- str_trim(rx_df[[rx_2[jj]]]) } } - names(rx_df)[names(rx_df) %in% rx_2] <- str_flatten(str_c(rx_2, collapse = "+")) #rename both variables as the combination - names(rx_df)[names(rx_df) %in% paste0(rx_2,".y")] <- str_flatten(str_c(rx_2, collapse = "+")) - names(rx_df)[names(rx_df) %in% paste0(rx_2,".x")] <- rx_2 + names(rx_df)[names(rx_df) %in% rx_2] <- str_flatten(str_c(rx_2, collapse = "+")) # rename both variables as the combination + names(rx_df)[names(rx_df) %in% paste0(rx_2, ".y")] <- str_flatten(str_c(rx_2, collapse = "+")) + names(rx_df)[names(rx_df) %in% paste0(rx_2, ".x")] <- rx_2 names_vec[k] <- str_flatten(str_c(rx_2, collapse = "+")) - } else if ((length(rx_2) > 1) & (str_flatten(str_c(rx_2, collapse = "+")) %in% names(rx_abo_upd))){#if more than one antibiotic in regimen and susceptibility of the combination considered - rx_df <- merge(x = rx_df, y = rx_abo_upd[,c("date","patient","mo",str_flatten(str_c(rx_2, collapse = "+")))], by = c("date","patient","mo")) + } else if ((length(rx_2) > 1) & (str_flatten(str_c(rx_2, collapse = "+")) %in% names(rx_abo_upd))) { # if more than one antibiotic in regimen and susceptibility of the combination considered + rx_df <- merge(x = rx_df, y = rx_abo_upd[, c("date", "patient", "mo", str_flatten(str_c(rx_2, collapse = "+")))], by = c("date", "patient", "mo")) rx_df[[str_flatten(str_c(rx_2, collapse = "+"))]] <- str_trim(rx_df[[str_flatten(str_c(rx_2, collapse = "+"))]]) names_vec[k] <- str_flatten(str_c(rx_2, collapse = "+")) } else { - rx_df <- merge(x = rx_df, y = rx_abo_upd[,c("date","patient","mo",rx_2)], by = c("date","patient","mo")) #then bind separate antimicrobials in regimen + rx_df <- merge(x = rx_df, y = rx_abo_upd[, c("date", "patient", "mo", rx_2)], by = c("date", "patient", "mo")) # then bind separate antimicrobials in regimen rx_df[[rx_2]] <- str_trim(rx_df[[rx_2]]) - names(rx_df)[names(rx_df) %in% rx_2] <- str_flatten(str_c(rx_2, collapse = "+")) #rename both variables as the combination - names(rx_df)[names(rx_df) %in% paste0(rx_2,".y")] <- str_flatten(str_c(rx_2, collapse = "+")) - names(rx_df)[names(rx_df) %in% paste0(rx_2,".x")] <- rx_2 + names(rx_df)[names(rx_df) %in% rx_2] <- str_flatten(str_c(rx_2, collapse = "+")) # rename both variables as the combination + names(rx_df)[names(rx_df) %in% paste0(rx_2, ".y")] <- str_flatten(str_c(rx_2, collapse = "+")) + names(rx_df)[names(rx_df) %in% paste0(rx_2, ".x")] <- rx_2 names_vec[k] <- rx_2 } } }) - - if (any(is.na(rx_df$mo))){ + + if (any(is.na(rx_df$mo))) { missing1 <- which(is.na(rx_df$mo)) - if (rx_df[missing1,"fullname"] != "NA"){ - rx_df[missing1,"mo"] <- as.mo(rx_df[missing1,]$fullname, keep_synonyms = TRUE) + if (rx_df[missing1, "fullname"] != "NA") { + rx_df[missing1, "mo"] <- as.mo(rx_df[missing1, ]$fullname, keep_synonyms = TRUE) } else { - rx_df <- rx_df[-missing1,] + rx_df <- rx_df[-missing1, ] } } - - - #Generate adapted first isolate dataset on antimicrobial level - if (isolate_first == "yes"){ #if dataset has already been deduplicated for first isolates + + + # Generate adapted first isolate dataset on antimicrobial level + if (isolate_first == "yes") { # if dataset has already been deduplicated for first isolates test_isolates_first <- rx_df } else { - test_isolates_first <- rx_df[first_isolate(x = rx_df, - method = "e", - episode_days = 14, - col_date = var_date, - col_mo = "mo") == TRUE,] #Only include isolates for microorganisms < 14 days apart + test_isolates_first <- rx_df[first_isolate( + x = rx_df, + method = "e", + episode_days = 14, + col_date = var_date, + col_mo = "mo" + ) == TRUE, ] # Only include isolates for microorganisms < 14 days apart } - - - + + test_isolates_first_upd <<- test_isolates_first %>% - pivot_longer(cols = names(test_isolates_first)[which(sapply(test_isolates_first, - function(y) any(str_detect(y,"^S$"))|any(str_detect(y,"^R$"))|any(str_detect(y,"^SENSITIVE$"))| any(str_detect(y,"^RESISTANT$"))))], - names_to = "keyantimicrobials", values_to = "antibiogram") %>% #combine all regimens and antibiograms into single variables - mutate(antibiogram = ifelse(antibiogram == "I"|antibiogram == "INTERMEDIATE",susceptible_I,antibiogram)) %>% #simplify susceptibility outputs - 90-60 rule - mutate(antibiogram = ifelse(antibiogram == "SENSITIVE","S", antibiogram)) %>% - mutate(antibiogram = ifelse(antibiogram == "RESISTANT","R",antibiogram)) %>% - mutate(antibiogram = factor(antibiogram), - keyantimicrobials = as.factor(keyantimicrobials)) - - - #recode susceptibility of regimes if not already in the dataset: if any S, then all S; if any NA and not S, then combination NA; if all R, then combination R. + pivot_longer( + cols = names(test_isolates_first)[which(sapply( + test_isolates_first, + function(y) any(str_detect(y, "^S$")) | any(str_detect(y, "^R$")) | any(str_detect(y, "^SENSITIVE$")) | any(str_detect(y, "^RESISTANT$")) + ))], + names_to = "keyantimicrobials", values_to = "antibiogram" + ) %>% # combine all regimens and antibiograms into single variables + mutate(antibiogram = ifelse(antibiogram == "I" | antibiogram == "INTERMEDIATE", susceptible_I, antibiogram)) %>% # simplify susceptibility outputs - 90-60 rule + mutate(antibiogram = ifelse(antibiogram == "SENSITIVE", "S", antibiogram)) %>% + mutate(antibiogram = ifelse(antibiogram == "RESISTANT", "R", antibiogram)) %>% + mutate( + antibiogram = factor(antibiogram), + keyantimicrobials = as.factor(keyantimicrobials) + ) + + + # recode susceptibility of regimes if not already in the dataset: if any S, then all S; if any NA and not S, then combination NA; if all R, then combination R. print("-------------------") print(test_isolates_first_upd) print(names(test_isolates_first_upd)) print(duplicated(names(test_isolates_first_upd))) print(any(duplicated(names(test_isolates_first_upd)))) print("-------------------") - - if (any(duplicated(names(test_isolates_first_upd)))){ + + if (any(duplicated(names(test_isolates_first_upd)))) { test_isolates_temp3 <- test_isolates_upd %>% mutate(antibiogram = as.character(antibiogram)) %>% - mutate(antibiogram = replace_na(antibiogram,"U")) %>% + mutate(antibiogram = replace_na(antibiogram, "U")) %>% mutate(combiantibiogram = "A") test_isolates_temp4 <- test_isolates_temp3 %>% - group_by(date,patient,mo,keyantimicrobials) %>% - mutate(combiantibiogram = ifelse(any(str_detect(antibiogram,"S")), "S",combiantibiogram)) %>% - mutate(combiantibiogram = ifelse(any(str_detect(antibiogram,"U")) & !any(str_detect(antibiogram,"S")), "U",combiantibiogram)) %>% - mutate(combiantibiogram = ifelse(!any(str_detect(antibiogram,"U")) & !any(str_detect(antibiogram,"S")), "R", combiantibiogram)) %>% - distinct(date,patient,mo,.keep_all = TRUE) %>% + group_by(date, patient, mo, keyantimicrobials) %>% + mutate(combiantibiogram = ifelse(any(str_detect(antibiogram, "S")), "S", combiantibiogram)) %>% + mutate(combiantibiogram = ifelse(any(str_detect(antibiogram, "U")) & !any(str_detect(antibiogram, "S")), "U", combiantibiogram)) %>% + mutate(combiantibiogram = ifelse(!any(str_detect(antibiogram, "U")) & !any(str_detect(antibiogram, "S")), "R", combiantibiogram)) %>% + distinct(date, patient, mo, .keep_all = TRUE) %>% ungroup() %>% select(-antibiogram) %>% rename("antibiogram" = "combiantibiogram") %>% - mutate(antibiogram = ifelse(antibiogram == "U",NA_character_, antibiogram)) %>% + mutate(antibiogram = ifelse(antibiogram == "U", NA_character_, antibiogram)) %>% mutate(antibiogram = as.factor(antibiogram)) - - test_isolates_temp5 <- test_isolates_upd %>% #isolate the single regimens - group_by(date,patient,mo) %>% - filter(!str_detect(keyantimicrobials,fixed("+"))) %>% + + test_isolates_temp5 <- test_isolates_upd %>% # isolate the single regimens + group_by(date, patient, mo) %>% + filter(!str_detect(keyantimicrobials, fixed("+"))) %>% ungroup() - - test_isolates_final <- bind_rows(test_isolates_temp4,test_isolates_temp5) + + test_isolates_final <- bind_rows(test_isolates_temp4, test_isolates_temp5) test_isolates_final <- test_isolates_final %>% - arrange(patient) - + arrange(patient) } else { test_isolates_final <- test_isolates_first_upd - } - + } + test_isolates_final <<- test_isolates_final - + test_isolates_final$fullname <- as.factor(test_isolates_final$fullname) test_isolates_final$date <- ymd(test_isolates_final$date) - - - #Calculate pathogen incidence and susceptible by regimen - mo_name_total <- test_isolates_final %>% #deduplicate pathogen list - filter(!duplicated(mo)) %>% - select(mo,fullname) - - organism_count_total <- test_isolates_final %>% #count the number of occurrences of pathogens within first isolates set + + + # Calculate pathogen incidence and susceptible by regimen + mo_name_total <- test_isolates_final %>% # deduplicate pathogen list + filter(!duplicated(mo)) %>% + select(mo, fullname) + + organism_count_total <- test_isolates_final %>% # count the number of occurrences of pathogens within first isolates set group_by(mo) %>% - distinct(date,patient,.keep_all = TRUE) %>% + distinct(date, patient, .keep_all = TRUE) %>% count(mo) %>% ungroup() %>% arrange(desc(n)) - + organism_count_total_upd <- organism_count_total %>% mutate(mo = as.character(mo)) %>% - mutate(mo = ifelse(str_detect(mo, "^B_KLBSL"),"B_KLBSL",mo)) %>% - mutate(mo = as.factor(mo)) + mutate(mo = ifelse(str_detect(mo, "^B_KLBSL"), "B_KLBSL", mo)) %>% + mutate(mo = as.factor(mo)) klebsiella_combine <- organism_count_total_upd %>% filter(mo == "B_KLBSL") %>% summarise(n_kleb = sum(n)) organism_count_total_upd <- organism_count_total_upd %>% mutate(n = ifelse(mo == "B_KLBSL", klebsiella_combine$n_kleb, n)) %>% - distinct(mo,.keep_all = TRUE) + distinct(mo, .keep_all = TRUE) organism_count_total_upd <- rename(organism_count_total_upd, - "n_inc" = "n") - - regimen_organism <- slice_max(organism_count_total_upd, order_by = n_inc, n = pathogen_in) #choose only the top n number of occurring pathogens to consider in WISCA - total_pathogens <- sum(regimen_organism$n_inc) #total number of occurrences of pathogens - print(paste0("Total pathogens = ",sum(organism_count_total_upd$n_inc))) + "n_inc" = "n" + ) + + regimen_organism <- slice_max(organism_count_total_upd, order_by = n_inc, n = pathogen_in) # choose only the top n number of occurring pathogens to consider in WISCA + total_pathogens <- sum(regimen_organism$n_inc) # total number of occurrences of pathogens + print(paste0("Total pathogens = ", sum(organism_count_total_upd$n_inc))) print(paste0("Number of pathogens contributing to WISCA = ", total_pathogens)) - print(paste0("Percentage of pathogens contributing to WISCA = ",round((total_pathogens/sum(organism_count_total_upd$n_inc))*100,0),"%")) - + print(paste0("Percentage of pathogens contributing to WISCA = ", round((total_pathogens / sum(organism_count_total_upd$n_inc)) * 100, 0), "%")) + test_isolates_final <- test_isolates_final %>% mutate(mo = as.character(mo)) %>% - mutate(mo = ifelse(str_detect(mo, "^B_KLBSL"), "B_KLBSL",mo)) %>% #combine all Klebsiella species together + mutate(mo = ifelse(str_detect(mo, "^B_KLBSL"), "B_KLBSL", mo)) %>% # combine all Klebsiella species together mutate(mo = as.factor(mo)) %>% mutate(fullname = as.character(fullname)) %>% - mutate(fullname = ifelse(str_detect(fullname, "Klebsiella"), "Klebsiella sp.", fullname)) %>% #rename all Klebsiella species + mutate(fullname = ifelse(str_detect(fullname, "Klebsiella"), "Klebsiella sp.", fullname)) %>% # rename all Klebsiella species mutate(fullname = as.factor(fullname)) - - - #for each antimicrobial regimen calculate the pathogen incidence and sensitivity + + + # for each antimicrobial regimen calculate the pathogen incidence and sensitivity params_set_out <- data.frame() - - if (analysis %in% names(test_isolates_final)){ - - #if there is a facility/ward/category level analysis required - for (j in 1:length(unique(test_isolates_final[[analysis]]))){#for every facility/ward/category - infection_episodes <- length(unique(test_isolates_final[test_isolates_final[[analysis]] == unique(test_isolates_final[[analysis]])[j],]$patient)) - - if (infection_episodes < 100){#must have at least 100 infection episodes for WISCA - warning(paste0("Number of infection episodes = ",infection_episodes,". Minimum sample size for WISCA is 100 infection episodes. Below minimum sample size will produce inaccurate coverage estimates.")) - + + if (analysis %in% names(test_isolates_final)) { + # if there is a facility/ward/category level analysis required + for (j in 1:length(unique(test_isolates_final[[analysis]]))) { # for every facility/ward/category + infection_episodes <- length(unique(test_isolates_final[test_isolates_final[[analysis]] == unique(test_isolates_final[[analysis]])[j], ]$patient)) + + if (infection_episodes < 100) { # must have at least 100 infection episodes for WISCA + warning(paste0("Number of infection episodes = ", infection_episodes, ". Minimum sample size for WISCA is 100 infection episodes. Below minimum sample size will produce inaccurate coverage estimates.")) } else { - print(paste0("Number of infection episodes = ",infection_episodes," > 100 minimum required. Sample size adequate for WISCA analysis.")) + print(paste0("Number of infection episodes = ", infection_episodes, " > 100 minimum required. Sample size adequate for WISCA analysis.")) } - - + + y_site <- subset(test_isolates_final, test_isolates_final[[analysis]] == unique(test_isolates_final[[analysis]])[j]) - - mo_name_sites <- y_site %>% #deduplicate - filter(!duplicated(mo)) %>% - select(mo,fullname,all_of(analysis)) - - organism_count_regimen <- y_site %>% #count the number of organisms per regimen + + mo_name_sites <- y_site %>% # deduplicate + filter(!duplicated(mo)) %>% + select(mo, fullname, all_of(analysis)) + + organism_count_regimen <- y_site %>% # count the number of organisms per regimen filter(mo %in% regimen_organism$mo) %>% group_by(mo) %>% distinct(date, patient, .keep_all = TRUE) %>% count(mo) %>% ungroup() %>% arrange(desc(n)) - - - organism_count_df <- left_join(x = organism_count_regimen, y = mo_name_sites, by = "mo")[,c("mo",analysis,"fullname","n")] - + + + organism_count_df <- left_join(x = organism_count_regimen, y = mo_name_sites, by = "mo")[, c("mo", analysis, "fullname", "n")] + total_sites_pathogens <- sum(organism_count_df$n) - print(paste0("Number of pathogens contributing to WISCA in ",unique(test_isolates_final[[analysis]])[j]," = ", total_sites_pathogens)) - - organism_count_df <- organism_count_df %>% - mutate(prop.n = n/total_sites_pathogens) #pathogen incidence = number of pathogen occurring/total pathogen occurrences included in WISCA - # - - susceptible_regimen_tested <<- y_site %>% #determine sensitivity profile - assume those with NA not tested. Calculate susceptibility only on tested + print(paste0("Number of pathogens contributing to WISCA in ", unique(test_isolates_final[[analysis]])[j], " = ", total_sites_pathogens)) + + organism_count_df <- organism_count_df %>% + mutate(prop.n = n / total_sites_pathogens) # pathogen incidence = number of pathogen occurring/total pathogen occurrences included in WISCA + # + + susceptible_regimen_tested <<- y_site %>% # determine sensitivity profile - assume those with NA not tested. Calculate susceptibility only on tested filter(mo %in% regimen_organism$mo) %>% filter(!is.na(antibiogram)) %>% - group_by(mo,keyantimicrobials) %>% + group_by(mo, keyantimicrobials) %>% distinct(date, patient, .keep_all = TRUE) %>% count(antibiogram) %>% ungroup() %>% - arrange(desc(n)) - susceptible_regimen_ntested <<- y_site %>% #determine sensitivity profile - assume those with NA not tested. Calculate susceptibility only on tested + arrange(desc(n)) + susceptible_regimen_ntested <<- y_site %>% # determine sensitivity profile - assume those with NA not tested. Calculate susceptibility only on tested filter(mo %in% regimen_organism$mo) %>% - filter(is.na(antibiogram)) %>% #Not tested - group_by(mo,keyantimicrobials) %>% + filter(is.na(antibiogram)) %>% # Not tested + group_by(mo, keyantimicrobials) %>% distinct(date, patient, .keep_all = TRUE) %>% count(antibiogram) %>% ungroup() %>% - arrange(desc(n)) - - organism_count_df_tested <<- susceptible_regimen_tested %>% - group_by(mo,keyantimicrobials) %>% + arrange(desc(n)) + + organism_count_df_tested <<- susceptible_regimen_tested %>% + group_by(mo, keyantimicrobials) %>% summarise(tested_n = sum(n), .groups = "keep") %>% ungroup() - organism_count_df_ntested <<- susceptible_regimen_ntested %>% - group_by(mo,keyantimicrobials) %>% + organism_count_df_ntested <<- susceptible_regimen_ntested %>% + group_by(mo, keyantimicrobials) %>% summarise(ntested_n = sum(n), .groups = "keep") %>% ungroup() - - organism_count_df_combine_tested <- full_join(x = organism_count_df_tested, y = organism_count_df_ntested, by = c("mo","keyantimicrobials")) #combine tested and nontested + + organism_count_df_combine_tested <- full_join(x = organism_count_df_tested, y = organism_count_df_ntested, by = c("mo", "keyantimicrobials")) # combine tested and nontested organism_count_df_combine_tested <- organism_count_df_combine_tested %>% - mutate(tested_n = ifelse(is.na(tested_n), 0 ,tested_n), - ntested_n = ifelse(is.na(ntested_n), 0, ntested_n)) - - organism_count_df_regimen_tested <- left_join(x = organism_count_df, y = organism_count_df_combine_tested[,c("mo","keyantimicrobials","tested_n")], by = "mo") - - #minimum number of tested isolates per ABO should be 30 for accurate coverage estimates + mutate( + tested_n = ifelse(is.na(tested_n), 0, tested_n), + ntested_n = ifelse(is.na(ntested_n), 0, ntested_n) + ) + + organism_count_df_regimen_tested <- left_join(x = organism_count_df, y = organism_count_df_combine_tested[, c("mo", "keyantimicrobials", "tested_n")], by = "mo") + + # minimum number of tested isolates per ABO should be 30 for accurate coverage estimates condition_tested <- organism_count_df_regimen_tested %>% - filter(tested_n <30) - if (nrow(condition_tested) > 0){ + filter(tested_n < 30) + if (nrow(condition_tested) > 0) { warning("Number of tested isolates per regimen should exceed 30. Coverage estimates will be inaccurate for following regimens") - View(condition_tested[c("mo","n","keyantimicrobials","tested_n")]) + View(condition_tested[c("mo", "n", "keyantimicrobials", "tested_n")]) } else { print("Number of tested isolates per regimen exceed minimum threshold of 30.") } - + organism_tested_sensitive <- susceptible_regimen_tested %>% filter(antibiogram == "S") - - if (nrow(susceptible_regimen_tested)> 0){ - sensitivity <- left_join(x = organism_count_df_regimen_tested, y = organism_tested_sensitive, by = c("mo","keyantimicrobials")) + + if (nrow(susceptible_regimen_tested) > 0) { + sensitivity <- left_join(x = organism_count_df_regimen_tested, y = organism_tested_sensitive, by = c("mo", "keyantimicrobials")) sensitivity <- sensitivity %>% rename("S_n" = "n.y") %>% - mutate(S_n = ifelse(is.na(S_n),0,S_n)) %>% + mutate(S_n = ifelse(is.na(S_n), 0, S_n)) %>% select(-antibiogram) - sensitivity <- sensitivity %>% #calculate proportion sensitive out of those tested and having results - mutate(prop.S = ifelse(tested_n != 0, S_n/tested_n, 0)) + sensitivity <- sensitivity %>% # calculate proportion sensitive out of those tested and having results + mutate(prop.S = ifelse(tested_n != 0, S_n / tested_n, 0)) sensitivity$perc.S <- sensitivity$prop.S * 100 - - params_set_out <- rbind.data.frame(params_set_out, sensitivity, row.names = NULL) - } else { + + params_set_out <- rbind.data.frame(params_set_out, sensitivity, row.names = NULL) + } else { next } } - + params_set_out$fullname <- droplevels(params_set_out$fullname) params_set_out[[names(test_isolates_final)[names(test_isolates_final) == analysis]]] <- as.factor(params_set_out[[names(test_isolates_final)[names(test_isolates_final) == analysis]]]) - - } else{ - + } else { infection_episodes <- length(unique(test_isolates_final$patient)) - if (infection_episodes < 100){#must have at least 100 infection episodes for WISCA - warning(paste0("Number of infection episodes = ",infection_episodes,". Minimum sample size for WISCA is 100 infection episodes. Below minimum sample size will produce inaccurate coverage estimates.")) - + if (infection_episodes < 100) { # must have at least 100 infection episodes for WISCA + warning(paste0("Number of infection episodes = ", infection_episodes, ". Minimum sample size for WISCA is 100 infection episodes. Below minimum sample size will produce inaccurate coverage estimates.")) } else { - print(paste0("Number of infection episodes = ",infection_episodes," > 100 minimum required. Sample size adequate for WISCA analysis.")) + print(paste0("Number of infection episodes = ", infection_episodes, " > 100 minimum required. Sample size adequate for WISCA analysis.")) } - - mo_name_sites <- test_isolates_final %>% #deduplicate - filter(!duplicated(mo)) %>% - select(mo,fullname) - - organism_count_path <- test_isolates_final %>% #count the number of organisms + + mo_name_sites <- test_isolates_final %>% # deduplicate + filter(!duplicated(mo)) %>% + select(mo, fullname) + + organism_count_path <- test_isolates_final %>% # count the number of organisms filter(mo %in% regimen_organism$mo) %>% group_by(mo) %>% distinct(date, patient, .keep_all = TRUE) %>% count(mo) %>% ungroup() %>% - arrange(desc(n)) - - organism_count_df <- left_join(x = organism_count_path, y = mo_name_sites, by = "mo")[,c("mo","fullname","n")] - + arrange(desc(n)) + + organism_count_df <- left_join(x = organism_count_path, y = mo_name_sites, by = "mo")[, c("mo", "fullname", "n")] + total_sites_pathogens <- sum(organism_count_df$n) - - - - organism_count_df <- organism_count_df %>% - mutate(prop.n = n/total_pathogens) #pathogen incidence = number of pathogen occurring/total pathogen occurrences included in WISCA - - - susceptible_regimen_tested <<- test_isolates_final %>% #determine sensitivity profile - assume those with NA not tested. Calculate susceptibility only on tested + + + organism_count_df <- organism_count_df %>% + mutate(prop.n = n / total_pathogens) # pathogen incidence = number of pathogen occurring/total pathogen occurrences included in WISCA + + + susceptible_regimen_tested <<- test_isolates_final %>% # determine sensitivity profile - assume those with NA not tested. Calculate susceptibility only on tested filter(mo %in% regimen_organism$mo) %>% - filter(!is.na(antibiogram)) %>% #Tested - group_by(mo,keyantimicrobials) %>% + filter(!is.na(antibiogram)) %>% # Tested + group_by(mo, keyantimicrobials) %>% distinct(date, patient, .keep_all = TRUE) %>% count(antibiogram) %>% ungroup() %>% - arrange(desc(n)) - susceptible_regimen_ntested <<- test_isolates_final %>% #determine sensitivity profile - assume those with NA not tested. Calculate susceptibility only on tested + arrange(desc(n)) + susceptible_regimen_ntested <<- test_isolates_final %>% # determine sensitivity profile - assume those with NA not tested. Calculate susceptibility only on tested filter(mo %in% regimen_organism$mo) %>% - filter(is.na(antibiogram)) %>% #Not tested - group_by(mo,keyantimicrobials) %>% + filter(is.na(antibiogram)) %>% # Not tested + group_by(mo, keyantimicrobials) %>% distinct(date, patient, .keep_all = TRUE) %>% count(antibiogram) %>% ungroup() %>% - arrange(desc(n)) - - organism_count_df_tested <<- susceptible_regimen_tested %>% - group_by(mo,keyantimicrobials) %>% + arrange(desc(n)) + + organism_count_df_tested <<- susceptible_regimen_tested %>% + group_by(mo, keyantimicrobials) %>% summarise(tested_n = sum(n), .groups = "keep") %>% ungroup() - organism_count_df_ntested <<- susceptible_regimen_ntested %>% - group_by(mo,keyantimicrobials) %>% + organism_count_df_ntested <<- susceptible_regimen_ntested %>% + group_by(mo, keyantimicrobials) %>% summarise(ntested_n = sum(n), .groups = "keep") %>% ungroup() - - organism_count_df_combine_tested <- full_join(x = organism_count_df_tested, y = organism_count_df_ntested, by = c("mo","keyantimicrobials")) #combine tested and nontested + + organism_count_df_combine_tested <- full_join(x = organism_count_df_tested, y = organism_count_df_ntested, by = c("mo", "keyantimicrobials")) # combine tested and nontested organism_count_df_combine_tested <- organism_count_df_combine_tested %>% - mutate(tested_n = ifelse(is.na(tested_n), 0 ,tested_n), - ntested_n = ifelse(is.na(ntested_n), 0, ntested_n)) - - organism_count_df_regimen_tested <- left_join(x = organism_count_df, y = organism_count_df_combine_tested[,c("mo","keyantimicrobials","tested_n")], by = "mo") - - #minimum number of tested isolates per ABO should be 30 for accurate coverage estimates + mutate( + tested_n = ifelse(is.na(tested_n), 0, tested_n), + ntested_n = ifelse(is.na(ntested_n), 0, ntested_n) + ) + + organism_count_df_regimen_tested <- left_join(x = organism_count_df, y = organism_count_df_combine_tested[, c("mo", "keyantimicrobials", "tested_n")], by = "mo") + + # minimum number of tested isolates per ABO should be 30 for accurate coverage estimates condition_tested <- organism_count_df_regimen_tested %>% - filter(tested_n <30) - if (nrow(condition_tested) > 0){ + filter(tested_n < 30) + if (nrow(condition_tested) > 0) { warning("Number of tested isolates per regimen should exceed 30. Coverage estimates will be inaccurate for these regimens.") - View(condition_tested[,c("mo","n","keyantimicrobials","tested_n")]) + View(condition_tested[, c("mo", "n", "keyantimicrobials", "tested_n")]) } else { print("Number of tested isolates per regimen exceed minimum threshold of 30.") } - - + + organism_tested_sensitive <- susceptible_regimen_tested %>% filter(antibiogram == "S") - - if (nrow(susceptible_regimen_tested)> 0){ - sensitivity <- left_join(x = organism_count_df_regimen_tested, y = organism_tested_sensitive, by = c("mo","keyantimicrobials")) + + if (nrow(susceptible_regimen_tested) > 0) { + sensitivity <- left_join(x = organism_count_df_regimen_tested, y = organism_tested_sensitive, by = c("mo", "keyantimicrobials")) sensitivity <- sensitivity %>% rename("S_n" = "n.y") %>% - mutate(S_n = ifelse(is.na(S_n),0,S_n)) %>% + mutate(S_n = ifelse(is.na(S_n), 0, S_n)) %>% select(-antibiogram) - sensitivity <- sensitivity %>% #calculate proportion sensitive out of those tested and having results - mutate(prop.S = ifelse(tested_n != 0, S_n/tested_n, 0)) + sensitivity <- sensitivity %>% # calculate proportion sensitive out of those tested and having results + mutate(prop.S = ifelse(tested_n != 0, S_n / tested_n, 0)) sensitivity$perc.S <- sensitivity$prop.S * 100 - - params_set_out <- rbind.data.frame(params_set_out, sensitivity, row.names = NULL) - + + params_set_out <- rbind.data.frame(params_set_out, sensitivity, row.names = NULL) } else { next } params_set_out$fullname <- droplevels(params_set_out$fullname) - } - + # if (infection_in != ""){ # params_set_out <- params_set_out %>% # mutate(infection_type = infection_in) %>% # mutate(infection_type_full = infection_full) %>% # rowwise() %>% # mutate(regimens = ifelse(str_detect(keyantimicrobials, fixed("+")), - # str_c(sapply(unlist(unique(str_split(keyantimicrobials, fixed("+")))),ab_name,USE.NAMES = FALSE), collapse = " + "), + # str_c(sapply(unlist(unique(str_split(keyantimicrobials, fixed("+")))),ab_name,USE.NAMES = FALSE), collapse = " + "), # ab_name(keyantimicrobials))) %>% # select(mo:prop.n, regimens,keyantimicrobials,tested_n:infection_type, infection_type_full) - # - # + # + # # } else { # print("here??") # params_set_out <- params_set_out %>% # mutate(infection_type_full = infection_full) %>% # rowwise() %>% # mutate(regimens = ifelse(str_detect(keyantimicrobials, fixed("+")), - # str_c(sapply(unlist(unique(str_split(keyantimicrobials, fixed("+")))),ab_name,USE.NAMES = FALSE), collapse = " + "), + # str_c(sapply(unlist(unique(str_split(keyantimicrobials, fixed("+")))),ab_name,USE.NAMES = FALSE), collapse = " + "), # ab_name(keyantimicrobials))) %>% # select(mo:prop.n, regimens,keyantimicrobials,tested_n:infection_type, infection_type_full) # } - - + return(params_set_out) - - } diff --git a/data-raw/wisca_test/wisca_AMR.R b/data-raw/wisca_test/wisca_AMR.R index d6f16c4eb..3db376b76 100644 --- a/data-raw/wisca_test/wisca_AMR.R +++ b/data-raw/wisca_test/wisca_AMR.R @@ -1,122 +1,128 @@ - -# Copyright (c) [2022] [Larisse Bolton (author), Aislinn Cook (contributor)] -# Adapted from: Bielicki JA, Sharland M, Heath PT, et al. Evaluation of the coverage of 3 antibiotic regimens for -# neonatal sepsis in the hospital setting across Asian countries. JAMA Netw Open. -# 2020:3(2):e1921124. doi:10.1001.jamanetworkopen.2019.21124 - - -wisca_funct <- function(wisca_in,analysis){ - -#function used to gerenrate coverage estimate parameters from input data -priors <- function(wisca_prior_in){ - #INCIDENCE - #prior Dirichlet (Gamma) parameters - A <- rep(1, times = length(unique(wisca_prior_in$mo))) - Multiplier <- rep(1, times = length(unique(wisca_prior_in$mo))) - multinomial_obs <- round((wisca_prior_in$n.x)*Multiplier,0) - - #posterior Dirichlet (Gamma) parameters - gamma_A <- A + multinomial_obs - B <- rep(1, times = length(gamma_A)) - - ##SUSCEPTIBILITY - #prior Beta parameters - beta_A <- rep(1, times = length(unique(wisca_prior_in$mo))) - beta_B <- rep(1, times = length(unique(wisca_prior_in$mo))) - - #Binomial distribution parameters - r <- wisca_prior_in$S_n #number of pathogens that tested sensitive - n_obs <- wisca_prior_in$tested_n #number of pathogens tested - # n_tested <- round(n_obs*(wisca_calc_input$prop.sens)) - diff_nr <- n_obs - r #difference between number of pathogens that were tested and those that tested sensitive - - #posterior beta parameters - post_beta_1 <- beta_A + r - post_beta_2 <- beta_B + diff_nr - - priors_df <- bind_cols(gamma_A,B,post_beta_1,post_beta_2) - names(priors_df) <- c("gamma_A","B","post_beta_1","post_beta_2") - return(priors_df) -} - -#simulations per bug -#function to generate simulations -coverage <- function(wisca_sim_in){ - sim_coverage <- wisca_sim_in %>% - mutate(random_incidence = runif(n = nrow(wisca_sim_in), min = 0, max = 1), - random_susceptibility = runif(n = nrow(wisca_sim_in), min = 0, max = 1)) %>% - mutate(simulation_bug = qgamma(random_incidence, shape = gamma_A, scale = B), - simulation_suscep = qbeta(p = random_susceptibility, - shape1 = post_beta_1, shape2 = post_beta_2)) %>% - mutate(sim_inc_total = sum(simulation_bug), - simulated_incidence = simulation_bug/sim_inc_total) %>% - mutate(simulated_bugcover = simulated_incidence *simulation_suscep, - coverage = sum(simulated_bugcover)) - sim_coverage_out <- slice_head(sim_coverage, n = 1)$coverage - return(sim_coverage_out) -} - -##will run this for every regimen -set.seed(1243) -cover <- data.frame() - -for (gg in 1:length(unique(wisca_in$keyantimicrobials))){ - simulation_nr <- 1000 - #generate 1000 coverage estimates and determine mean and CI - wisca <- subset(wisca_in, keyantimicrobials == unique(wisca_in$keyantimicrobials)[gg]) - - if (analysis %in% names(wisca)){ - cover_level <- data.frame() - for (ii in 1:length(levels(wisca[[analysis]]))){ - wisca_prep <- subset(wisca, wisca[[analysis]] == levels(wisca[[analysis]])[ii]) - params_priors <- priors(wisca_prior_in = wisca_prep) - - coverage_simulation_total <- replicate(n = simulation_nr,coverage(wisca_sim_in = params_priors)) - - av_coverage <- mean(coverage_simulation_total) - ci_coverage_lower <- quantile(coverage_simulation_total, probs = 0.025) - ci_coverage_upper <- quantile(coverage_simulation_total, probs = 0.975) - - combine_out <- cbind.data.frame(unique(wisca_in$keyantimicrobials)[gg], - levels(wisca[[analysis]])[ii], - av_coverage, - ci_coverage_lower, - ci_coverage_upper, - row.names = NULL) - names(combine_out) <- c("Regimen",str_to_sentence(analysis),"Coverage","Lower_CI","Upper_CI") - cover_level <- rbind.data.frame(cover_level,combine_out, row.names = NULL) - } - cover <- rbind.data.frame(cover,cover_level, row.names = NULL) - - - } else { - params_priors <- priors(wisca_prior_in = wisca) - - coverage_simulation_total <- replicate(n = simulation_nr,coverage(wisca_sim_in = params_priors)) - - av_coverage <- mean(coverage_simulation_total) - ci_coverage_lower <- quantile(coverage_simulation_total, probs = 0.025) - ci_coverage_upper <- quantile(coverage_simulation_total, probs = 0.975) - - combine_out <- cbind.data.frame(unique(wisca_in$keyantimicrobials)[gg], - av_coverage, - ci_coverage_lower, - ci_coverage_upper, - row.names = NULL) - names(combine_out) <- c("Regimen","Coverage","Lower_CI","Upper_CI") - cover <- rbind.data.frame(cover,combine_out, row.names = NULL) - - } - -} -cover <- cover %>% - mutate(across(.cols = Coverage:Upper_CI, ~ round(.x*100,1))) %>% - rowwise() %>% - mutate(Regimen_full = ifelse(str_detect(Regimen, fixed("+")), - str_c(sapply(unlist(unique(str_split(Regimen, fixed("+")))),ab_name,USE.NAMES = FALSE), collapse = " + "), - ab_name(Regimen))) %>% - relocate(Regimen_full,.before = Regimen) - -return(cover) - -} +# Copyright (c) [2022] [Larisse Bolton (author), Aislinn Cook (contributor)] +# Adapted from: Bielicki JA, Sharland M, Heath PT, et al. Evaluation of the coverage of 3 antibiotic regimens for +# neonatal sepsis in the hospital setting across Asian countries. JAMA Netw Open. +# 2020:3(2):e1921124. doi:10.1001.jamanetworkopen.2019.21124 + + +wisca_funct <- function(wisca_in, analysis) { + # function used to gerenrate coverage estimate parameters from input data + priors <- function(wisca_prior_in) { + # INCIDENCE + # prior Dirichlet (Gamma) parameters + A <- rep(1, times = length(unique(wisca_prior_in$mo))) + Multiplier <- rep(1, times = length(unique(wisca_prior_in$mo))) + multinomial_obs <- round((wisca_prior_in$n.x) * Multiplier, 0) + + # posterior Dirichlet (Gamma) parameters + gamma_A <- A + multinomial_obs + B <- rep(1, times = length(gamma_A)) + + ## SUSCEPTIBILITY + # prior Beta parameters + beta_A <- rep(1, times = length(unique(wisca_prior_in$mo))) + beta_B <- rep(1, times = length(unique(wisca_prior_in$mo))) + + # Binomial distribution parameters + r <- wisca_prior_in$S_n # number of pathogens that tested sensitive + n_obs <- wisca_prior_in$tested_n # number of pathogens tested + # n_tested <- round(n_obs*(wisca_calc_input$prop.sens)) + diff_nr <- n_obs - r # difference between number of pathogens that were tested and those that tested sensitive + + # posterior beta parameters + post_beta_1 <- beta_A + r + post_beta_2 <- beta_B + diff_nr + + priors_df <- bind_cols(gamma_A, B, post_beta_1, post_beta_2) + names(priors_df) <- c("gamma_A", "B", "post_beta_1", "post_beta_2") + return(priors_df) + } + + # simulations per bug + # function to generate simulations + coverage <- function(wisca_sim_in) { + sim_coverage <- wisca_sim_in %>% + mutate( + random_incidence = runif(n = nrow(wisca_sim_in), min = 0, max = 1), + random_susceptibility = runif(n = nrow(wisca_sim_in), min = 0, max = 1) + ) %>% + mutate( + simulation_bug = qgamma(random_incidence, shape = gamma_A, scale = B), + simulation_suscep = qbeta( + p = random_susceptibility, + shape1 = post_beta_1, shape2 = post_beta_2 + ) + ) %>% + mutate( + sim_inc_total = sum(simulation_bug), + simulated_incidence = simulation_bug / sim_inc_total + ) %>% + mutate( + simulated_bugcover = simulated_incidence * simulation_suscep, + coverage = sum(simulated_bugcover) + ) + sim_coverage_out <- slice_head(sim_coverage, n = 1)$coverage + return(sim_coverage_out) + } + + ## will run this for every regimen + set.seed(1243) + cover <- data.frame() + + for (gg in 1:length(unique(wisca_in$keyantimicrobials))) { + simulation_nr <- 1000 + # generate 1000 coverage estimates and determine mean and CI + wisca <- subset(wisca_in, keyantimicrobials == unique(wisca_in$keyantimicrobials)[gg]) + + if (analysis %in% names(wisca)) { + cover_level <- data.frame() + for (ii in 1:length(levels(wisca[[analysis]]))) { + wisca_prep <- subset(wisca, wisca[[analysis]] == levels(wisca[[analysis]])[ii]) + params_priors <- priors(wisca_prior_in = wisca_prep) + + coverage_simulation_total <- replicate(n = simulation_nr, coverage(wisca_sim_in = params_priors)) + + av_coverage <- mean(coverage_simulation_total) + ci_coverage_lower <- quantile(coverage_simulation_total, probs = 0.025) + ci_coverage_upper <- quantile(coverage_simulation_total, probs = 0.975) + + combine_out <- cbind.data.frame(unique(wisca_in$keyantimicrobials)[gg], + levels(wisca[[analysis]])[ii], + av_coverage, + ci_coverage_lower, + ci_coverage_upper, + row.names = NULL + ) + names(combine_out) <- c("Regimen", str_to_sentence(analysis), "Coverage", "Lower_CI", "Upper_CI") + cover_level <- rbind.data.frame(cover_level, combine_out, row.names = NULL) + } + cover <- rbind.data.frame(cover, cover_level, row.names = NULL) + } else { + params_priors <- priors(wisca_prior_in = wisca) + + coverage_simulation_total <- replicate(n = simulation_nr, coverage(wisca_sim_in = params_priors)) + + av_coverage <- mean(coverage_simulation_total) + ci_coverage_lower <- quantile(coverage_simulation_total, probs = 0.025) + ci_coverage_upper <- quantile(coverage_simulation_total, probs = 0.975) + + combine_out <- cbind.data.frame(unique(wisca_in$keyantimicrobials)[gg], + av_coverage, + ci_coverage_lower, + ci_coverage_upper, + row.names = NULL + ) + names(combine_out) <- c("Regimen", "Coverage", "Lower_CI", "Upper_CI") + cover <- rbind.data.frame(cover, combine_out, row.names = NULL) + } + } + cover <- cover %>% + mutate(across(.cols = Coverage:Upper_CI, ~ round(.x * 100, 1))) %>% + rowwise() %>% + mutate(Regimen_full = ifelse(str_detect(Regimen, fixed("+")), + str_c(sapply(unlist(unique(str_split(Regimen, fixed("+")))), ab_name, USE.NAMES = FALSE), collapse = " + "), + ab_name(Regimen) + )) %>% + relocate(Regimen_full, .before = Regimen) + + return(cover) +} diff --git a/index.md b/index.md index 4f4ab3797..401da2dd4 100644 --- a/index.md +++ b/index.md @@ -170,13 +170,9 @@ example_isolates %>% #> ℹ Using column mo as input for `mo_fullname()` #> ℹ Using column mo as input for `mo_is_gram_negative()` #> ℹ Using column mo as input for `mo_is_intrinsic_resistant()` -#> ℹ Determining intrinsic resistance based on 'EUCAST Expected -#> Resistant Phenotypes' v1.2 (2023). This note will be shown -#> once per session. -#> ℹ For `aminoglycosides()` using columns GEN (gentamicin), TOB -#> (tobramycin), AMK (amikacin), and KAN (kanamycin) -#> ℹ For `carbapenems()` using columns IPM (imipenem) and MEM -#> (meropenem) +#> ℹ Determining intrinsic resistance based on 'EUCAST Expected Resistant Phenotypes' v1.2 (2023). This note will be shown once per session. +#> ℹ For `aminoglycosides()` using columns GEN (gentamicin), TOB (tobramycin), AMK (amikacin), and KAN (kanamycin) +#> ℹ For `carbapenems()` using columns IPM (imipenem) and MEM (meropenem) #> # A tibble: 35 × 7 #> bacteria GEN TOB AMK KAN IPM MEM #> @@ -253,8 +249,7 @@ for tracking resistance per species over time: antibiogram(example_isolates, mo_transform = "gramstain", antimicrobials = c("AMC", carbapenems(), "TZP")) -#> ℹ For `carbapenems()` using columns IPM (imipenem) and MEM -#> (meropenem) +#> ℹ For `carbapenems()` using columns IPM (imipenem) and MEM (meropenem) ``` | Pathogen | Amoxicillin/clavulanic acid | Imipenem | Meropenem | Piperacillin/tazobactam | @@ -369,16 +364,13 @@ out <- example_isolates %>% # calculate AMR using resistance(), over all aminoglycosides and polymyxins: summarise(across(c(aminoglycosides(), polymyxins()), resistance)) -#> ℹ For `aminoglycosides()` using columns GEN (gentamicin), TOB -#> (tobramycin), AMK (amikacin), and KAN (kanamycin) +#> ℹ For `aminoglycosides()` using columns GEN (gentamicin), TOB (tobramycin), AMK (amikacin), and KAN (kanamycin) #> ℹ For `polymyxins()` using column COL (colistin) #> Warning: There was 1 warning in `summarise()`. -#> ℹ In argument: `across(c(aminoglycosides(), polymyxins()), -#> resistance)`. +#> ℹ In argument: `across(c(aminoglycosides(), polymyxins()), resistance)`. #> ℹ In group 3: `ward = "Outpatient"`. #> Caused by warning: -#> ! Introducing NA: only 23 results available for KAN in group: -#> ward = "Outpatient" (whilst `minimum = 30`). +#> ! Introducing NA: only 23 results available for KAN in group: ward = "Outpatient" (whilst `minimum = 30`). out #> # A tibble: 3 × 6 #> ward GEN TOB AMK KAN COL diff --git a/man/antibiogram.Rd b/man/antibiogram.Rd index 1124b92e7..8e563d409 100644 --- a/man/antibiogram.Rd +++ b/man/antibiogram.Rd @@ -334,7 +334,8 @@ if (requireNamespace("dplyr")) { top_n_microorganisms(n = 10) \%>\% group_by( age_group = age_groups(age, c(25, 50, 75)), - gender) \%>\% + gender + ) \%>\% wisca(antimicrobials = c("TZP", "TZP+TOB", "TZP+GEN")) } diff --git a/man/antimicrobial_selectors.Rd b/man/antimicrobial_selectors.Rd index 5b9005a67..359c9ba47 100644 --- a/man/antimicrobial_selectors.Rd +++ b/man/antimicrobial_selectors.Rd @@ -308,7 +308,6 @@ carbapenems() # Though they are primarily intended to use for selections and filters. # Examples sections below are split into 'dplyr', 'base R', and 'data.table': -\donttest{ \dontrun{ # dplyr ------------------------------------------------------------------- @@ -329,8 +328,10 @@ example_isolates \%>\% select(administrable_per_os()) # get AMR for all aminoglycosides e.g., per ward: example_isolates \%>\% group_by(ward) \%>\% - summarise(across(aminoglycosides(), - resistance)) + summarise(across( + aminoglycosides(), + resistance + )) # You can combine selectors with '&' to be more specific: example_isolates \%>\% @@ -340,8 +341,10 @@ example_isolates \%>\% example_isolates \%>\% filter(mo_genus() \%in\% c("Escherichia", "Klebsiella")) \%>\% group_by(ward) \%>\% - summarise_at(not_intrinsic_resistant(), - resistance) + summarise_at( + not_intrinsic_resistant(), + resistance + ) # get susceptibility for antimicrobials whose name contains "trim": example_isolates \%>\% @@ -394,8 +397,9 @@ x <- example_isolates[carbapenems() == "R", ] y <- example_isolates \%>\% filter(carbapenems() == "R") z <- example_isolates \%>\% filter(if_all(carbapenems(), ~ .x == "R")) identical(x, y) && identical(y, z) - } + +\donttest{ # base R ------------------------------------------------------------------ # select columns 'IPM' (imipenem) and 'MEM' (meropenem)