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

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

我有一个数据集和另一个带有嵌套数据列表的数据集。

    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"))

我正在尝试映射列表中的变量 (table)。该变量称为 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)
}

我在这里应用函数,以便将 med_name_one 作为变量。

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

但我不知道为什么会出现此错误?

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.

谁能帮我理解这个错误?另外我怎样才能检索 med_name_one?

这是一种选择

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))

首先,我们必须更改 get_medication_name 函数来处理 table 列中没有行的情况,在您的示例中就是这种情况。

然后我们需要将 map 专门应用于 table 列。