【问题标题】: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为什么我在错误中出现错误:`mutate()` 输入 `medication_name` 出现问题。 x 结果 1 必须是单个字符串,而不是长度为 2 的字符向量
【发布时间】:2021-04-08 15:13:20
【问题描述】:

我有一个数据集与另一个包含嵌套数据列表的数据集。

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

我正在尝试从列表(表)中映射一个变量。该变量称为 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?

【问题讨论】:

  • 那么您提供的示例数据的变量名称是什么?是age_pharma 吗?您似乎在使用 mutate() 没有不常见的数据参数。您是否尝试在table 列上使用map?我没有看到任何名称为 medication_name 的值,所以我不确定你想分散什么注意力。样本输入的期望输出究竟是什么?
  • @MrFlick - 我重新编辑了帖子。因为我意识到我混淆了,但也有一些术语错误。数据参数是age_pharma。我忘记将 is 定义为我使用 dput 的对象。

标签: r tidyverse purrr


【解决方案1】:

这是一个选项

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 函数来处理表格列中没有行的情况,例如您的示例。

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

【讨论】:

  • 它确实有效,但此解决方案不考虑对同一患者进行的第二种药物治疗。实际上,我(再次)重新编辑了帖子并完成了所需的更改,其中我的第一个和第二个 id 有多种药物。因此,我希望得到一个解决方案,说明给予第 1 和第 2 id 的第二种药物。提前致谢!
  • 如果您为样本输入提供了所需的输出,这会容易得多。这样我们就可以轻松检查解决方案是否返回正确答案。
  • 我知道,我刚刚意识到我还没有考虑到第二次用药。我很抱歉
猜你喜欢
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多