GaB
GaB

Reputation: 1132

Why do I get Error in Error: Problem with `mutate()` input `medication_name`. x Result 1 must be a single string, not a character vector of length 2

I have a data set with another with a list of a nested data.

    age_pharma <-  structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8), age_band = c("5_9", 
"10_14", "15-19", "20-24", "5_9", "10_14", "15-19", "20-24"), 
    table = list(structure(list(med_name_one = c("Co-amoxiclav", 
    "doxycycline"), med_name_two = c(NA, "Gentamicin"), mg_one = c("411 mg", 
    "120 mg"), mg_two = c(NA, "11280 mg"), datetime = c("2020-01-03 10:08", 
    "2020-01-01 11:08"), date_time = structure(c(1578046080, 
    1577876880), tzone = "Europe/London", class = c("POSIXct", 
    "POSIXt"))), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
    -2L)), structure(list(med_name_one = c("Gentamicin", "Co-trimoxazole"
    ), med_name_two = c("Co-trimoxazole", NA), mg_one = c("11280 mg", 
    "8 mg"), mg_two = c("8 mg", NA), datetime = c("2020-01-02 19:08", 
    "2020-01-08 20:08"), date_time = structure(c(1577992080, 
    1578514080), tzone = "Europe/London", class = c("POSIXct", 
    "POSIXt"))), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
    -2L)), structure(list(med_name_one = "Gentamicin", med_name_two = NA_character_, 
        mg_one = "11280 mg", mg_two = NA_character_, datetime = "2020-01-02 19:08", 
        date_time = structure(1577992080, tzone = "Europe/London", class = c("POSIXct", 
        "POSIXt"))), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
    -1L)), structure(list(med_name_one = "Co-trimoxazole", med_name_two = NA_character_, 
        mg_one = "8 mg", mg_two = NA_character_, datetime = "2020-01-08 20:08", 
        date_time = structure(1578514080, tzone = "Europe/London", class = c("POSIXct", 
        "POSIXt"))), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
    -1L)), structure(list(med_name_one = "Sodium Chloride", med_name_two = NA_character_, 
        mg_one = "411 mg", mg_two = NA_character_, datetime = "2020-01-10 08:08", 
        date_time = structure(1578643680, tzone = "Europe/London", class = c("POSIXct", 
        "POSIXt"))), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
    -1L)), structure(list(med_name_one = "Piperacillin", med_name_two = NA_character_, 
        mg_one = "120 mg", mg_two = NA_character_, datetime = "2020-01-03 09:08", 
        date_time = structure(1578042480, tzone = "Europe/London", class = c("POSIXct", 
        "POSIXt"))), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
    -1L)), structure(list(med_name_one = character(0), med_name_two = character(0), 
        mg_one = character(0), mg_two = character(0), datetime = character(0), 
        date_time = structure(numeric(0), tzone = "Europe/London", class = c("POSIXct", 
        "POSIXt"))), class = c("tbl_df", "tbl", "data.frame"), row.names = integer(0)), 
        structure(list(med_name_one = character(0), med_name_two = character(0), 
            mg_one = character(0), mg_two = character(0), datetime = character(0), 
            date_time = structure(numeric(0), tzone = "Europe/London", class = c("POSIXct", 
            "POSIXt"))), class = c("tbl_df", "tbl", "data.frame"
        ), row.names = integer(0)))), row.names = c(NA, -8L), class = c("tbl_df", 
"tbl", "data.frame"))

I am trying to map a variable from the list (table). The variable is called med_name_one.

get_medication_name <- function(medication_name_df) {
  
  medication_name <- medication_name_df %>%
    dplyr::group_by(id) %>%
    dplyr::arrange(datetime) %>%
    pull(med_name_one)
}

Here I am applying the function so that I get the med_name_one as a variable.

age_pharma <- mutate(medication_name = purrr::map(age_pharma, get_medication_name))

Yet I do not know why I get this error?

Error: Problem with `mutate()` input `medication_name`.
x Result 1 must be a single string, not a character vector of length 2
ℹ Input `medication_name` is `purrr::map_chr(table, get_medication_name)`.
Run `rlang::last_error()` to see where the error occurred.

Can someone help me understand the error? Also how can I retrieve med_name_one?

Upvotes: 1

Views: 1552

Answers (1)

MrFlick
MrFlick

Reputation: 206243

Here's one option

get_medication_name <- function(medication_name_df) {
  
  medication_name <- medication_name_df %>%
    dplyr::arrange(datetime) %>%
    dplyr::summarize(medname = first(med_name_one)) %>%
    dplyr::pull(medname)
}

age_pharma %>% mutate(medication_name = purrr::map_chr(table, get_medication_name))

First we had to change the get_medication_name function to handle the case where there are no rows in the table column which is the case in your example.

Then we need to apply the map specifically to the table column.

Upvotes: 1

Related Questions