寻找 table 个具有特定字母组合的元素并删除最后几个字符

Seek table elements with a specific letter combination and remove the last few characters

我有一个 table 基因,其中一些是重复的。我不担心重复。重复来自 Ensemble 基因数据库的转录本。报告时,它包含基因 XXXX,然后添加 _ENST00000WWWWWW,此添加部分始终为 16 个字符(其中 XXXXX 为基因名称,WWWWWW 为整数)。这显示为 XXXX_ENST00000WWWWWW。有太多实例无法手动删除它们。我怎样才能遍历这个,识别这个模式,并删除那些元素?下面的例子。

       Name              Gene.Name CDS.Mutation AA.Mutation
1       1A                 ASXL3     c.350G>T     p.S117I
2       1A ASXL3_ENST00000269197    c.1229G>T     p.S410I
3       1A              C9orf174      c.95G>A      p.R32Q
4       1A  CLTC_ENST00000269122    c.2128G>C     p.G710R
5       1A                COL4A4     c.274G>A      p.G92R
6       1A                CREBBP    c.4445A>G    p.Y1482C



       Name             Gene.Name CDS.Mutation AA.Mutation
1       1A                 ASXL3     c.350G>T     p.S117I
2       1A                 ASXL3    c.1229G>T     p.S410I
3       1A              C9orf174      c.95G>A      p.R32Q
4       1A                  CLTC    c.2128G>C     p.G710R
5       1A                COL4A4     c.274G>A      p.G92R
6       1A                CREBBP    c.4445A>G    p.Y1482C

这是我拼凑出来的,但我可能还不够了解,无法完全理解。我在这方面有很多错误。

raw <- read.xlsx("Mutations.xlsx")
for (i in 1:nrow(raw)){
  if (length(grep("ENST", raw[i,2])) == 1){
    raw[i,2] <- gsub('.{16}$','', raw[i,2])
  }
}

使用正向预测 ?= 是一种选择。查找 _ENST 之前的字符并使用组收集这些字符。

df$Gene.Name <- gsub("(\w{4,})(?=_ENST).{12}","\1" ,df$Gene.Name, perl = TRUE)

df
#   Name Gene.Name CDS.Mutation AA.Mutation
# 1   1A     ASXL3     c.350G>T     p.S117I
# 2   1A     ASXL3    c.1229G>T     p.S410I
# 3   1A  C9orf174      c.95G>A      p.R32Q
# 4   1A      CLTC    c.2128G>C     p.G710R
# 5   1A    COL4A4     c.274G>A      p.G92R
# 6   1A    CREBBP    c.4445A>G    p.Y1482C

数据:

df <- read.table(text =
"    Name              Gene.Name CDS.Mutation AA.Mutation
1       1A                 ASXL3     c.350G>T     p.S117I
2       1A ASXL3_ENST00000269197    c.1229G>T     p.S410I
3       1A              C9orf174      c.95G>A      p.R32Q
4       1A  CLTC_ENST00000269122    c.2128G>C     p.G710R
5       1A                COL4A4     c.274G>A      p.G92R
6       1A                CREBBP    c.4445A>G    p.Y1482C",
header = TRUE, stringsAsFactors = FALSE)

你可以替代:

 transform(df,Gene.Name=sub("_.*","",Gene.Name))
      Name Gene.Name CDS.Mutation AA.Mutation
    1   1A     ASXL3     c.350G>T     p.S117I
    2   1A     ASXL3    c.1229G>T     p.S410I
    3   1A  C9orf174      c.95G>A      p.R32Q
    4   1A      CLTC    c.2128G>C     p.G710R
    5   1A    COL4A4     c.274G>A      p.G92R
    6   1A    CREBBP    c.4445A>G    p.Y1482C