前面给大家介绍过了 ☞R批量预测miRNA和靶基因之间的调控关系-ENCORI篇 ☞R批量预测miRNA和靶基因之间的调控关系-TargetScan篇 有小伙伴拿自己的数据试了一下,反馈预测结果太多了。一般对于多个数据库或者多个软件预测的结果,可以通过取交集来提高预测结果的可信度,并且这样也能大大减少最后预测结果的数目。 我们前面介绍过☞RNA相互作用神器——ENCORI,这个数据库就提供多个miRNA靶基因预测软件的预测结果。你可以在查询miRNA靶基因的时候限定使用哪些预测软件(如下图红圈所示),这样得到的结果就是多个预测软件预测结果的交集。这里需要注意,限定的软件越多,得到的结果会越少,也有可能完全得不到结果,所以这个需要根据自己数据的实际情况确定。 那么我们怎么利用R代码来对miRNA预测结果取交集呢? 我们知道一般在R里,对向量取交集,直接用intersect函数就可以了。 a=c("a","b","c") b=c("b","c","g") intersect(a,b) #[1] "b" "c"
a=1:4 b=3:7 intersect(a,b) #[1] 3 4 那么如果想对R里面的数据框取交集该如何操作呢?miRNA预测结果都是两列的数据框。 我们首先来创建两个数据框,模拟一下不同的软件的预测结果 set.seed(123) df1=data.frame(mir=sample(LETTERS,26),target=c(rep("TP53",13),rep("PTEN",13))) df2=data.frame(mir=sample(LETTERS,26),target=c(rep("TP53",13),rep("PTEN",13))) 如果直接用R里面默认的intersect函数来对数据框取交集,结果是不对的 而我们希望得到的结果是对两列都取交集。 下面给大家介绍三种对R数据框取交集的方法 方法一、我们将各列的信息合并成一个字符串,然后取交集 #将各列的信息用_连接起来 combine1=apply(df1,1,function(x) paste(x,collapse = "_")) combine2=apply(df2,1,function(x) paste(x,collapse = "_")) #查看合并后的字符串向量1和字符串向量2的交集 index=combine1 %in% combine2 #取出原始的数据框的交集数据 result1=df1[index,] #保存数据框交集的结果 write.table(file="intersect1.txt",result1,quote=F,row.names = F,sep="\t") 方法二、利用dplyr包里的intersect函数 #加载dplyr包 library(dplyr) #直接利用dplyr包里面的intersect函数对数据框取交集 result2=intersect(df1,df2) #保存交集结果 write.table(file="intersect2.txt",result2,quote=F,row.names = F,sep="\t") #查看跟第一种方法得到的结果是否一致 all_equal(result1,result2) #[1] TRUE 方法三、利用data.table包里的fintersect函数 #加载data.table包 library(data.table) #将数据框转换成data.table格式,然后利用fintersect函数取交集 result3=fintersect(setDT(df1), setDT(df2)) #保存交集结果 write.table(file="intersect3.txt",result3,quote=F,row.names = F,sep="\t") #查看跟第一种方法得到的结果是否一致 all_equal(result1,result3) #[1] TRUE 为了方便大家交流学习,共同进步,我特地创建了微信交流群 |
|