我从 R 文档中知道,可以对
gsub
函数进行编程以执行同时操作,例如大写/小写替换:
gsub("([a-z]*)([A-Z]*)", "\\U\\1\\L\\2", "upper LOWER", perl=TRUE)
[1] "UPPER lower"
我有一个最小的例子,一个字符串“STTS”,我想用“TRUE”替换“S”,用“FALSE”替换“T”。我不能按顺序进行,因为匹配的模式显然会发生冲突。
我已经尝试过这段代码:
gsub("([S]*)\\1([T]*)\\2", "TRUE \\1FALSE \\2", "STTS",perl=TRUE)
已收到
[1] "TRUE FALSE STRUE FALSE TSTRUE FALSE "
而不是
"TRUE FALSE FALSE TRUE"
您可以在此处使用
stringr::str_replace_all
应用条件替换:
library(stringr)
trimws(str_replace_all("STTS", "[ST]", function(x) ifelse(x=="S", "TRUE ", "FALSE ")))
## => [1] "TRUE FALSE FALSE TRUE"
此处使用 R 版本 4.3.1 (2023-06-16 ucrt)。
因此,
[ST]
模式找到S
或T
,并且根据与替换函数的匹配来替换该字母。
请参阅在线 R 演示。由于我们在每个
TRUE
或 FALSE
之后添加了一个空格,所以我添加了 trimws()
函数。