gpt4 book ai didi

r - case_when & %in%

转载 作者:行者123 更新时间:2023-12-05 01:24:19 31 4
gpt4 key购买 nike

我正在尝试在 case_when() 中使用 %in%,但是它不像在 R 中一般那样工作。下面是一个示例。有人可以指导这个实现有什么问题吗?

df <- structure(list(name = c("abc A", "xyz B", "jkl C"), text = c("my name is abc A", 
"my name is xyz B", "my name is jkl C")), class = "data.frame", row.names = c(NA,
-3L))

x <- c("ABC","B","C")

df %>% mutate(flag=case_when(name %in% x~TRUE, TRUE~FALSE))

输出

 name             text  flag
abc A my name is abc A FALSE
xyz B my name is xyz B FALSE
jkl C my name is jkl C FALSE

预期输出

 name             text  flag
abc A my name is abc A TRUE
xyz B my name is xyz B TRUE
jkl C my name is jkl C TRUE

最佳答案

这是预期的输出。字符串 "abc A" 未在向量 c("ABC","B","C") 中找到,"xyz B 也未找到""jkl C"

您是否正在尝试查找字符串匹配项?那么你应该使用 str_detect 而不是 %in%

df %>% mutate(flag=case_when(stringr::str_detect(name, x)~TRUE, TRUE~FALSE))
#> name text flag
#> 1 abc A my name is abc A FALSE
#> 2 xyz B my name is xyz B TRUE
#> 3 jkl C my name is jkl C TRUE

请注意,如果输出只有两个选项,TRUEFALSE,则根本不需要 case_when

df %>% mutate(flag = stringr::str_detect(name, x))
#> name text flag
#> 1 abc A my name is abc A FALSE
#> 2 xyz B my name is xyz B TRUE
#> 3 jkl C my name is jkl C TRUE

另请注意,情况 1 应为 FALSE,因为 "abc" 不匹配 "ABC"。如果您不关心大小写,您可以使用 grepl,如 AndS 所述。

关于r - case_when & %in%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71484130/

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