0

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

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

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

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

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

4

4 回答 4

1

您的正则表达式语法不正确。您的重复运算符之前没有任何内容。

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

这匹配以下划线前面的任何字符: 0to 9(或更多次)。1

工作演示

于 2014-07-27T22:32:36.767 回答
0

像这样的东西?:

 dataframe$ID <- gsub("[0-9]+_", "", dataframe$ID)
于 2014-07-27T22:32:10.850 回答
0

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

  1. "[0-9]*_"将匹配数字后跟“_”
  2. "[0-9]{7}_"将匹配 7 个数字,后跟 '_'
  3. ".{7}_"将匹配 7 个字符,后跟 '_'
于 2014-07-27T22:32:29.817 回答
0

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

ID <- c("1234567_GSM00298873", "1238416_GSM90473673", "98377829")
ifelse(grepl("_", ID), substr(x = ID, 9, nchar(ID)), ID)
于 2014-07-27T22:57:18.520 回答