gpt4 book ai didi

r - If else 语句检查字符串是否包含 R 中的子字符串

转载 作者:行者123 更新时间:2023-12-04 10:41:43 27 4
gpt4 key购买 nike

我有一个列表,其中包含每个观察的多个字符串(见下文)。

  [1] A, C, D 
[2] P, O, E
[3] W, E, W
[4] S, B, W

我想测试字符串是否包含某些子字符串,如果是,则返回相应的子字符串,在此示例中,这将是“A”或“B”(请参阅​​下面的所需结果)。每个观察将只包含 2 个子串 (A|B) 中的一个
  [1] A 
[2] NA
[3] NA
[4] B

不,我已经尝试解决这个问题,但它似乎效率很低,而且我也没有让它工作。我怎么能解决呢?
  if (i == "A") {
type <- "A"
} else if { (i == "B")
type <- "B"
} else { type <- "NA"
}

注意:我需要遍历 > 1000 个观察值

最佳答案

假设你有一个字符向量,你可以使用 stringr::str_extract以此目的:

s <- c('A, C, D', 'P, O, E', 'W, E, W', 'S, B, W')
s
# [1] "A, C, D" "P, O, E" "W, E, W" "S, B, W"
stringr::str_extract(s, 'A|B')
# [1] "A" NA NA "B"

如果首选单词匹配,请使用单词边界 \\b :
stringr::str_extract(s, '\\b(A|B)\\b')
# [1] "A" NA NA "B"

如果子字符串由 ", " 定义,你可以使用这个正则表达式 (?<=^|, )(A|B)(?=,|$) :
# use the test case from G.Grothendieck
stringr::str_extract(c("A.A, C", "D, B"), '(?<=^|, )(A|B)(?=,|$)')
# [1] NA "B"

关于r - If else 语句检查字符串是否包含 R 中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50819314/

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