r-如何以更有效的方式重写str_detect()


mutate(method = cur_group_id(),
method = paste0("M", method)) %>% 
mutate(method = case_when(
str_detect(variable, "testhc35") ~ "M2",
str_detect(variable, "testhc36") ~ "M2",
str_detect(variable, "testhc37") ~ "M2",
str_detect(variable, "testhi1") ~ "M2",
str_detect(variable, "testhi2") ~ "M2",
str_detect(variable, "testhi3") ~ "M2",
method == "M1" ~ "M1",
str_detect(variable, "testhc38") ~ "M3",
str_detect(variable, "testhc39") ~ "M3",
str_detect(variable, "testhc40") ~ "M3",
str_detect(variable, "testhi4") ~ "M3",
str_detect(variable, "testhi5") ~ "M3",
str_detect(variable, "testhi6") ~ "M3")) %>% 
unite(method_trait, c("method", "trait"), sep = "")

我相信我可以用str_detect((一起检测前6行,然后将最后6行作为一行。但我不知道该怎么做。

您可以对范围进行协调:

...
str_detect(variable, "testhc3[5-7]")  ~ "M2",
str_detect(variable, "testhi[1-3]")   ~ "M2",
method == "M1"                        ~ "M1",
str_detect(variable, "testhc3[8-9]")  ~ "M3",
str_detect(variable, "testhc40")      ~ "M3"
str_detect(variable, "testhi[4-6]")   ~ "M3"
...

然后您可以混合或(|(运算符:

...
str_detect(variable, "testh(c3[5-7]|i[1-3])")      ~ "M2",
method == "M1"                                     ~ "M1",
str_detect(variable, "testh(c3[8-9]|i[4-6]|c40)")  ~ "M3",
...

最新更新