gpt4 book ai didi

r - case_when 与部分字符串匹配和 contains()

转载 作者:行者123 更新时间:2023-12-02 03:14:28 29 4
gpt4 key购买 nike

我正在使用一个数据集,该数据集包含许多名为 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 一起使用,我看到了这个示例,但无法将其应用到我的案例中: 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"))

谢谢!

最佳答案

我认为你是在倒退。将 case_when 放入 pmap_chr 内,而不是相反:

library(dplyr)
library(purrr)
library(stringr)

problem %>%
mutate(final = pmap_chr(select(., contains("status")),
~ case_when(any(str_detect(c(...), "(?i)Exempt")) ~ "Exclude",
TRUE ~ "Completed")))

对于每个 pmap 迭代(problem 数据集的每一行),我们要使用 case_when 来检查是否存在字符串 豁免str_detect 中的 (?i) 使其不区分大小写。这与编写 str_detect(c(...), regex("Exempt",ignore_case = TRUE))

相同

输出:

# A tibble: 4 x 5
person status1 status2 status3 final
<chr> <chr> <chr> <chr> <chr>
1 Corey 7EXEMPT exempt EXEMPTED Exclude
2 Sibley Completed Completed Completed Completed
3 Justin Completed Completed Completed Completed
4 Ruth Pending Pending ExempT - 14 Exclude

关于r - case_when 与部分字符串匹配和 contains(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56588108/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com