我正在使用一个数据集,其中有许多名为 status1、status2 等的列。在这些列中,它表示某人是否豁免、完整、注册等。
不幸的是,豁免投入并不一致;这是一个示例:
library(dplyr)
problem <- tibble(person = c("Corey", "Sibley", "Justin", "Ruth"),
status1 = c("7EXEMPT", "Completed", "Completed", "Pending"),
status2 = c("exempt", "Completed", "Completed", "Pending"),
status3 = c("EXEMPTED", "Completed", "Completed", "ExempT - 14"))
我正在尝试使用 case_when() 来创建一个具有最终状态的新列。如果它说已完成,那么它们就已完成。如果它说豁免但没有说完整,那么他们就豁免了。
重要的是,我希望我的代码使用 contains("status") 或某些仅针对状态列且不需要全部键入的等效项,并且我希望它只需要部分字符串匹配即可豁免。
至于将 contains 与 case_when 一起使用,我看到了这个示例,但我无法将其应用于我的案例:使用 case_when 进行变异并包含 https://stackoverflow.com/questions/43696227/mutate-with-case-when-and-contains
这是我到目前为止尝试使用的,但正如你可以猜到的,它没有起作用:
library(purrr)
library(dplyr)
library(stringr)
solution <- problem %>%
mutate(final= case_when(pmap_chr(select(., contains("status")), ~
any(c(...) == str_detect(., "Exempt") ~ "Exclude",
TRUE ~ "Complete"
))))
这是我想要的最终产品的样子:
solution <- tibble(person = c("Corey", "Sibley", "Justin", "Ruth"),
status1 = c("7EXEMPT", "Completed", "Completed", "Pending"),
status2 = c("exempt", "Completed", "Completed", "Pending"),
status3 = c("EXEMPTED", "Completed", "Completed", "ExempT - 14"),
final = c("Exclude", "Completed", "Completed", "Exclude"))
谢谢你!