我试图删除所有以模式开头的字符" 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
答案 0 :(得分:5)
这使用单个gsub
删除不需要的部分:
Genes <- c("Gm5852,Gm5773,Tdpoz4,Tdpoz3,Gm911", "Fcgr1,Terc,Gm5703") # test data
gsub(",?Gm[^,]*,?", "", Genes)
,并提供:
[1] "Tdpoz4,Tdpoz3" "Fcgr1,Terc"
以下是正则表达式的可视化:
,?Gm[^,]*,?
答案 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)]
。