【R语言】根据映射关系来替换数据框中的内容

2022-09-21 17:49:19 浏览数 (1)

前面给大家介绍过☞R中的替换函数gsub,还给大家举了一个临床样本分类的具体例子。今天我们接着来分享一下如何根据已有的映射关系来对数据框中的数据进行替换。例如将数据框中的转录本ID转换成基因名字。我们直接结合这个具体的例子来进行分享。

假设我们手上有这个一个转录本ID和基因名字之间的对应关系,第一列是转录本ID,第二列是基因名字

然后我们手上还有一个这样的bed文件,里面是对应的5个基因的CDs区域在基因组上的坐标信息。

接下来我们要做的就是将第四列中的注释信息,从转录本ID替换成相应的基因名字。我们给大家分享三种不同的方法。

首先我们做准备工作,读入这两个文件,会用到前面讲过的☞正则表达式

代码语言:javascript复制
#读入转录本和基因名之间的映射关系
mapping=read.table("id_mapping.txt",sep="t",row.names=1)
#读入CDs区域坐标文件
bed=read.table("5gene_CDs.bed",sep="t")

#从第四列提取转录本信息,这里用了正则表达式,
#括号中匹配到的内容会存放在\1中
NM=gsub("(NM_.*?)_.*","\1",bed$V4)
#获取转录本号对应的基因名字
symbol=mapping[NM,1]

方法一、使用最原始的gsub函数

代码语言:javascript复制
#先将bed文件中的内容存放在result1中
result1=bed
#将NM开头的转录本号后面的内容提取出来,然后跟相应的基因名字贴到一起
#直接替换result的第四列注释信息
result1$V4=paste0(symbol,gsub("NM_.*?(_.*$)","\1",bed$V4))
#保存结果到5gene_CDs_symbol.bed文件中
write.table(file="5gene_CDs_symbol.bed",result1,quote=F,sep="t",col.names=F,row.names=F)
#查看result1的前几行
head(result1)

可以发现第四列的注释信息中,转录本ID已经全部转换成了基因名字

方法二、使用stringi函数

代码语言:javascript复制
#如果没有安装过stringi这个包,先运行下一行命令进行安装
#BiocManager::install("stringi")
library(stringi)
#先将bed文件中的内容存放在result2中
result2=bed
#使用stri_replace_all_regex进行替换
#将rownames(mapping),即转录本ID替换成mapping[[1]],即基因名字
result2$V4 <- stri_replace_all_regex(bed$V4, rownames(mapping), mapping[[1]],vectorize=F)
#查看结果
head(result2)

方法三、使用mgsub函数

前面讲☞使用R获取DNA的反向互补序列的时候也用到过这个函数

代码语言:javascript复制
#如果没有安装过mgsub这个包,先运行下一行命令进行安装
#BiocManager::install("mgsub")
library(mgsub)
#先将bed文件中的内容存放在result3中
result3=bed
#使用mgsub进行替换,将rownames(mapping),即转录本ID替换成mapping[[1]],即基因名字
result3$V4=mgsub(bed$V4, rownames(mapping), mapping[[1]])
#查看结果
head(result3)

今天的分享就先到这里,希望大家能有所收获。

参考资料:

☞R中的替换函数gsub

☞正则表达式

☞使用R获取DNA的反向互补序列

0 人点赞