我有一个包含 205 个变量的数据框 fy14Ch。其中 100 个是不同长度的字母数字代码。这些是连续的并标记为 x08ddx1 到 x08dx100。
我需要检测这 100 行中是否出现一系列以 I21... 和 I22... 和 I252... 开头的代码。如果他们这样做,我需要一个数字变量(我们称之为“Ch_MI”)来返回“1”。如果不是,则为“0”(数字)。
有人可以帮忙吗?谢谢
我正在 dplyr 中尝试 grepl() 但运气不佳。还有 str_detect...
改编自一个相关问题,该问题跨列查找单个字符串,对此进行了调整以查找一长串字符串:
look_for <- paste0("I", 21:252)
data.frame(x01 = c(LETTERS[1:4], "I26"),
x02 = c("II28", "I100", rep("a", 3))) |>
rowwise() |>
mutate(Ch_MI = +any(str_detect(
c_across(starts_with("x")),
paste(look_for, collapse = "|")))) |>
ungroup()
结果
# A tibble: 5 × 3
x01 x02 Ch_MI
<chr> <chr> <int>
1 A II28 1 # Note, this detects "I28" but perhaps OP doesn't want
2 B I100 1
3 C a 0
4 D a 0
5 I26 a 1
[是否有一个好的方法来调整它,以便它查找那些特定的字符串而不是其他字符串?我担心答案一如既往,是正则表达式。]