检测几十个字母数字代码中的一个是否出现在 R 数据帧行中,如果它们至少出现一次(在 R 中),则返回“1”

问题描述 投票:0回答:1

我有一个包含 205 个变量的数据框 fy14Ch。其中 100 个是不同长度的字母数字代码。这些是连续的并标记为 x08ddx1 到 x08dx100。

我需要检测这 100 行中是否出现一系列以 I21... 和 I22... 和 I252... 开头的代码。如果他们这样做,我需要一个数字变量(我们称之为“Ch_MI”)来返回“1”。如果不是,则为“0”(数字)。

有人可以帮忙吗?谢谢

我正在 dplyr 中尝试 grepl() 但运气不佳。还有 str_detect...

r
1个回答
0
投票

改编自一个相关问题,该问题跨列查找单个字符串,对此进行了调整以查找一长串字符串:

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

[是否有一个好的方法来调整它,以便它查找那些特定的字符串而不是其他字符串?我担心答案一如既往,是正则表达式。]

© www.soinside.com 2019 - 2024. All rights reserved.