如何在R中删除具有特定模式格式数据框的字符

时间:2015-01-26 16:38:34

标签: r

我试图删除所有以模式开头的字符" Gm"从我的data.frame的最后一栏

我的data.frame看起来像这样

level   logp  chr   start    end     CNA      Genes                                                           
  3     1.4   3      100     110    gain     Gm5852,Gm5773,Tdpoz4,Tdpoz3,Gm911                      
  4     18.10 3      962      966   gain     Fcgr1,Terc,Gm5703      

结果看起来应该是这样的

level   logp     chr   start    end     CNA           Genes                                                           
   3     1.4      3      100     110    gain    Tdpoz4,Tdpoz3                   
   4     18.10    3      962     966    gain    Fcgr1,Terc   

2 个答案:

答案 0 :(得分:5)

这使用单个gsub删除不需要的部分:

Genes <- c("Gm5852,Gm5773,Tdpoz4,Tdpoz3,Gm911", "Fcgr1,Terc,Gm5703") # test data
gsub(",?Gm[^,]*,?", "", Genes)

,并提供:

[1] "Tdpoz4,Tdpoz3" "Fcgr1,Terc"

以下是正则表达式的可视化:

,?Gm[^,]*,?

Regular expression visualization

Debuggex Demo

答案 1 :(得分:2)

给定数据框d

d$Genes_new <- sapply(strsplit(as.character(d$Genes),split=','),function(s) paste(s[!grepl('^Gm',s)],collapse=','))

#  level logp chr start end  CNA                             Genes     Genes_new
#1     3  1.4   3   100 110 gain Gm5852,Gm5773,Tdpoz4,Tdpoz3,Gm911 Tdpoz4,Tdpoz3
#2     4 18.1   3   962 966 gain                 Fcgr1,Terc,Gm5703    Fcgr1,Terc

此处,strsplit(as.character(d$Genes),split=',')为每行创建逗号分隔的基因名称列表,sapply适用于此列表的每个元素,该函数排除从Gm开始的所有基因名称({{1}并且连接剩余的基因(s[!grepl('^Gm',s)]