将给定字符替换为gsub函数中已定义参数之前的新字符

时间:2019-01-07 14:22:36

标签: r

我对R的资格不高,并且正在为一个问题而苦苦挣扎。我想用破折号“(-)”替换“ S11”模式之前的所有现有下划线。 S11只是一个数字,在我的表格中是可变的,例如S29,S30。这是我正在使用并失败的代码:

foo <- c("H2_2months_S11_L001_R1_001_(paired)_trimmed_(paired)_contig_940_[cov=11]_", "H2_2months_with_acetate_S101_L001_R1_001_(paired)_trimmed_(paired)_contig_940_[cov=11]_", "Formate_3months_S99_L001_R1_001_(paired)_trimmed_(paired)_contig_940_[cov=11]_")
Sample <- gsub(pattern="*(_S)", replacement="-", x=foo)

获取: [1]“ H2_2months-11_L001_R1_001_(配对)已修剪(配对)_contig_940_ [cov = 11] _”
[2]“ H2_2months_with_acetate-101_L001_R1_001_(配对)修剪(配对)_contig_940_ [cov = 11] _” [3]“ Formate_3months-99_L001_R1_001_(配对)已修剪(配对)_contig_940_ [cov = 11] _”

我也不希望删除"_S"并将其替换。我使用"_S[0-9]"作为匹配条件,在"_S"之前,下划线应更改为"-"

也请向我推荐一个很好的网站,我可以在该功能中学习这些“代码或符号”。预先感谢。

预期输出: [1]“ H2-2months-S11_L001_R1_001_(配对)已修剪(配对)_contig_940_ [cov = 11] _”
[2]“ H2-2个月含乙酸S101_L001_R1_001_(配对)修剪(配对)_contig_940_ [cov = 11] _” [3]“ Formate-3months-S99_L001_R1_001_(配对)已修剪(配对)_contig_940_ [cov = 11] _”

2 个答案:

答案 0 :(得分:1)

这将与“ _S11”匹配并将S11保存到组中。然后将其替换为“-”,后跟捕获的组“ S11”。

Sample <- gsub("_(S[0-9+])", "-\\1", foo)

一个学习更多正则表达式的好地方:https://www.regular-expressions.info/quickstart.html

测试正则表达式的绝佳场所,并提供以下匹配项的说明:https://regexr.com/

编辑:谢谢RLave,没有意识到S后面的数字可以是任何数字。

答案 1 :(得分:1)

这应该有效。

基本上,我们将作业分为两部分,首先是匹配("_(S[0-9+])",然后将结果字符串分割为"-",然后我们使用gsub来修复所有{{1 }}我们找到了。

"_"

然后我们分开:

foo <- c("H2_2months_S123_L001_R1_001_(paired)_trimmed_(paired)_contig_940_[cov=11]_")
foo <- gsub(pattern="_(S[0-9+])", replacement="-\\1", x=foo)
#foo
#[1] "H2_2months-S123_L001_R1_001_(paired)_trimmed_(paired)_contig_940_[cov=11]_"

现在,我们可以对split <- unlist(strsplit(foo, "-")) # split using the new "-" #split #[1] "H2_2months" #[2] "S123_L001_R1_001_(paired)_trimmed_(paired)_contig_940_[cov=11]_" 中的最后一个元素以外的所有内容使用简单的gsub

split

然后我们split_1 <- split[-length(split)] # fix all the "_" before the match (exclude the last) split_1 <- gsub("_", "-", split_1) 结果:

paste

在函数中,还有另一个示例:

paste0(split_1, "-", split[length(split)]) # paste back together
#[1] "H2-2months-S123_L001_R1_001_(paired)_trimmed_(paired)_contig_940_[cov=11]_"