从数据框中的字符串中删除字符

时间:2014-07-27 22:27:57

标签: regex r gsub grepl

我有一个数据框,其中“ID”列的值如下: 1234567_GSM00298873 1238416_GSM90473673 98377829

换句话说,有些行有7个数字后跟“_”后跟字母和数字;其他行只有数字

我想删除字母前面的数字和下划线,而不会影响只有数字的行。我试过了

dataframe$ID <- gsub("*_", "", dataframe$ID)

但这只会删除下划线。所以我了解到*意味着零或更多。 是否有通配符和重复运算符,以便我可以告诉它找到“任何 - 七次跟随_”的模式? 谢谢!

4 个答案:

答案 0 :(得分:1)

您的正则表达式语法不正确。你的重复算子之前没有任何东西。

dataframe$ID <- gsub('[0-9]+_', '', dataframe$ID)

这匹配任何字符:091或更多次),前面有下划线。

Working Demo

答案 1 :(得分:0)

这样的东西?:

 dataframe$ID <- gsub("[0-9]+_", "", dataframe$ID)

答案 2 :(得分:0)

链接http://marvin.cs.uidaho.edu/Handouts/regex.html可以帮助您。

  1. "[0-9]*_"将匹配数字后跟'_'
  2. "[0-9]{7}_"将匹配7个数字,后跟“_”
  3. ".{7}_"将匹配7个字符,后跟'_'

答案 3 :(得分:0)

另一种方法。如果字符串有下划线,则从下划线返回到字符串的末尾;如果没有,请返回字符串。

ID <- c("1234567_GSM00298873", "1238416_GSM90473673", "98377829")
ifelse(grepl("_", ID), substr(x = ID, 9, nchar(ID)), ID)