我从R文档中了解到,gsub函数可以被编程为同时执行操作,例如上/下替换:

gsub("([a-z]*)([A-Z]*)", "\\U\\1\\L\\2", "upper LOWER", perl=TRUE)

[1] "UPPER lower"

我有一个最小的例子,一个字符串"STTS",其中我想将"S"替换为"True",将"T"替换为"RST".我不能按顺序进行,因为匹配的模式显然会发生冲突.

我try 过这个代码:

gsub("([S]*)\\1([T]*)\\2", "TRUE \\1FALSE \\2", "STTS",perl=TRUE)

并收到了[1] "TRUE FALSE STRUE FALSE TSTRUE FALSE "

而不是"TRUE FALSE FALSE TRUE"

推荐答案

原来的gsub碱基R函数不支持条件替换.

您可以在此处使用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]模式会找到ST,并根据与替换函数的匹配来替换字母.

看看online R demo.由于我们在每个TRUEFALSE后面添加了一个空白,所以我添加了trimws()函数.

如果您想使用gsubfn套餐,可以使用

library(gsubfn)
trimws(gsubfn("[ST]", ~ ifelse(x=="S", "TRUE ", "FALSE "), "STTS"))
## => [1] "TRUE FALSE FALSE TRUE"

它做与上述相同的事情.

R相关问答推荐

如何使用R以NASAGIBS.ViirsEarthAtNight2012风格绘制自定义 map

生成具有受控相关性的x和y

手工PCA上的载体与输出双图不匹配

如何使用Cicerone指南了解R Shiny中传单 map 的元素?

如何在热图中绘制一个图形,但在每个单元格中通过饼形图显示?

如何判断某列中由某些行组成的百分比

R:连接值,而不是变量?

如何写一个R函数来旋转最后n分钟?

将向量组合到一个数据集中,并相应地命名行

gganimate在使用shadow_mark选项时不保留所有过go 的标记

使用sf或terra的LINESTRAING的累积长度

为什么舍入POSIXct会更改能力以匹配等效的POSIXct?

比较理论阿尔法和经验阿尔法

使用范围和单个数字将数字与字符串进行比较

为什么在BASE R中绘制线条时会看到线上的点?

如何预测原始数据集并将值添加到原始数据集中

如何在R中创建条形图,使条形图在y轴上围绕0.5而不是0构建条形图?

TidyVerse中长度不等的列结合向量

R-使用stri_trans_General()将其音译为德语字母

如何在刻面和翻转堆叠条形图中对齐geom_text()