R/subfield_content.R

Defines functions subfield_content

Documented in subfield_content

#' Extract specific subfield from funds dataframe
#'
#' @param df A dataframe made by read_funds_txt.
#' @param field_name A string of field_name 000-999.
#' @param subfield_name A string of subfield name starting with "$".
#' @param preserve_field_names A logic. Whether field names should be saved in resulting dataframe.
#' TRUE by default.
#' @param preserve_field_number A logic. Whether field numbers should be saved in resulting dataframe.
#' FALSE by default.
#' @examples
#' subfield_content(df = fund_df, field_name = "200", subfield_name = "$a")
#' subfield_content(df = fund_df, field_name = "210", subfield_name = "$c", preserve_field_names = FALSE)

subfield_content <- function(df, field_name, subfield_name, preserve_field_names = TRUE,
                             preserve_field_number = FALSE) {
  df <- df %>% filter(field == field_name)
  id <- df$id
  var <- lapply(
    df$var,
    subfield_extractor,
    subfield_name
  ) %>% unlist()
  l <- lapply(
    df$var,
    str_count,
    fixed(subfield_name)
  ) %>% unlist()
  l_n <- ifelse(l == 0, 0, 1)
  field_number <- rep(df$field_number, l_n)
  id <- rep(id, l)
  df <- data.frame(
    id = id,
    var = var
  )
  if (preserve_field_number) {
    df <- data.frame(
      id = id,
      field_number = field_number,
      var = var
    )
  }
  if (preserve_field_names) {
    df <- df %>% mutate(field = field_name, subfield = subfield_name) %>% select(id, field, subfield, var)
  }
  return(df)
}
Volodin-DD/rusmarcFunds documentation built on Oct. 31, 2019, 1:11 a.m.