使用gsub()按特定顺序删除特殊字符

时间:2019-01-19 11:03:19

标签: r

我一直在尝试通过使用gsub函数成功地用R清理df列。当>/不在包含字母的字符串之间时,我试图将它们删除。我陷入了以下阶段:

输入:

/ > abcdef/bbb
abcdef/ccc > / > abcdef/ccc > /
abcdef/bbb > abcdef/ccc > / > / > bbb/ccc

所需的输出:

abcdef/bbb
abcdef/ccc > abcdef/ccc
abcdef/bbb > abcdef/ccc > bbb/ccc

我用过gsub("(/ >)", "", df[,1])gsub("( > /)", "", df[,1]),但不起作用。当>符号位于字母或单词的字符串之前或之后时,由于要保留空格,空格变得更加困难。

有人知道解决方法吗?我不是真正的编码人员,所以将不胜感激:)

2 个答案:

答案 0 :(得分:1)

这项工作可以吗?

gsub("(/ > | > /)", "", ss)
#[1] "abcdef/bbb"                        "abcdef/ccc > abcdef/ccc"
#[3] "abcdef/bbb > abcdef/ccc > bbb/ccc"

样本数据

ss <- c("/ > abcdef/bbb", "abcdef/ccc > / > abcdef/ccc > /", "abcdef/bbb > abcdef/ccc > / > / > bbb/ccc")

答案 1 :(得分:0)

警告:这将删除空格:@Maurits Evers的答案中的数据:

   library(stringr)
    ss1<-str_remove_all(ss,'[/ >](?<= )')
    str_remove_all(ss1,"(/>)|(>/)")



 #[1] "abcdef/bbb"                    "abcdef/ccc>abcdef/ccc"        
#[3] "abcdef/bbb>abcdef/ccc>bbb/ccc"

这会保留它,但我发现它有些反复试验:

str_remove_all(ss,"(/ >)|(> /)")

#[1] " abcdef/bbb"                         "abcdef/ccc  > abcdef/ccc "          
#[3] "abcdef/bbb > abcdef/ccc   > bbb/ccc"