【问题标题】:Find and replace with wildcards in R在 R 中查找和替换通配符
【发布时间】:2024-01-13 03:11:01
【问题描述】:

我需要找出数据集中的值有 3 个 .x(例如 A1.1.1.1)的任何情况,并将其替换为另一个名称(例如 B1)。我目前有这个,它适用于A1.1.1.1,但我需要它能够为A1.x.x.x 工作,其中x 是任意数字(小于10)。有没有办法调整它以使其有效?

node_data$test<-str_replace(node_data$test, "A1.1.1.1", "B1")

【问题讨论】:

  • 也许提到你想要得到的输出。

标签: r replace find wildcard str-replace


【解决方案1】:

像这样?

ex_str <- c("A1.1.1.1", "D.1.1", "C.1.1.1", "J.2.1.3", "J.2.33.3")

str_replace(ex_str, "\\..\\..\\..", "B1")

[1] "A1B1"     "D.1.1"    "CB1"      "JB1"      "J.2.33.3"

请注意,在此示例中,每个点后面的字符不必相同,因此示例向量的第四个条目被替换。但是,被匹配的 '.x.x.x' 在每个 '.' 之后只能有一个字符。所以第五个条目不会被替换。

或者,以下正则表达式会将每个字符串的匹配段替换为.B1.B1.B1

str_replace(ex_str, "\\..\\..\\..", ".B1.B1.B1")

[1] "A1.B1.B1.B1" "D.1.1"       "C.B1.B1.B1"  "J.B1.B1.B1"  "J.2.33.3"

【讨论】:

  • 很高兴为您提供帮助,凯瑟琳!请务必将我的回复标记为此问题的答案。
【解决方案2】:

这应该可行。

gsub('A', 'B', gsub('(\\.\\d){3}' ,'', 'A1.1.2.3'))
# [1] "B1"

或者这个:

gsub('(A)(\\d)(\\.\\d){3}' ,'B\\2', 'A1.5.6.7')
# [1] "B1"

或者这个:

library(stringr)
str_replace('A1.1.2.3', '(A)(\\d)(\\.\\d){3}' ,'B\\2')
# [1] "B1"

【讨论】: