前面給大家介紹過了
?R批量預(yù)測miRNA和靶基因之間的調(diào)控關(guān)系-ENCORI篇
?R批量預(yù)測miRNA和靶基因之間的調(diào)控關(guān)系-TargetScan篇
有小伙伴拿自己的數(shù)據(jù)試了一下,反饋預(yù)測結(jié)果太多了。一般對于多個數(shù)據(jù)庫或者多個軟件預(yù)測的結(jié)果,可以通過取交集來提高預(yù)測結(jié)果的可信度,并且這樣也能大大減少最后預(yù)測結(jié)果的數(shù)目。
我們前面介紹過?RNA相互作用神器——ENCORI,這個數(shù)據(jù)庫就提供多個miRNA靶基因預(yù)測軟件的預(yù)測結(jié)果。你可以在查詢miRNA靶基因的時候限定使用哪些預(yù)測軟件(如下圖紅圈所示),這樣得到的結(jié)果就是多個預(yù)測軟件預(yù)測結(jié)果的交集。這里需要注意,限定的軟件越多,得到的結(jié)果會越少,也有可能完全得不到結(jié)果,所以這個需要根據(jù)自己數(shù)據(jù)的實(shí)際情況確定。

那么我們怎么利用R代碼來對miRNA預(yù)測結(jié)果取交集呢?
我們知道一般在R里,對向量取交集,直接用intersect函數(shù)就可以了。
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里面的數(shù)據(jù)框取交集該如何操作呢?miRNA預(yù)測結(jié)果都是兩列的數(shù)據(jù)框。

我們首先來創(chuàng)建兩個數(shù)據(jù)框,模擬一下不同的軟件的預(yù)測結(jié)果
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里面默認(rèn)的intersect函數(shù)來對數(shù)據(jù)框取交集,結(jié)果是不對的

而我們希望得到的結(jié)果是對兩列都取交集。
下面給大家介紹三種對R數(shù)據(jù)框取交集的方法
方法一、我們將各列的信息合并成一個字符串,然后取交集
#將各列的信息用_連接起來
combine1=apply(df1,1,function(x) paste(x,collapse = "_"))
combine2=apply(df2,1,function(x) paste(x,collapse = "_"))
#查看合并后的字符串向量1和字符串向量2的交集
index=combine1 %in% combine2
#取出原始的數(shù)據(jù)框的交集數(shù)據(jù)
result1=df1[index,]
#保存數(shù)據(jù)框交集的結(jié)果
write.table(file="intersect1.txt",result1,quote=F,row.names = F,sep="\t")

方法二、利用dplyr包里的intersect函數(shù)
#加載dplyr包
library(dplyr)
#直接利用dplyr包里面的intersect函數(shù)對數(shù)據(jù)框取交集
result2=intersect(df1,df2)
#保存交集結(jié)果
write.table(file="intersect2.txt",result2,quote=F,row.names = F,sep="\t")
#查看跟第一種方法得到的結(jié)果是否一致
all_equal(result1,result2)
#[1] TRUE

方法三、利用data.table包里的fintersect函數(shù)
#加載data.table包
library(data.table)
#將數(shù)據(jù)框轉(zhuǎn)換成data.table格式,然后利用fintersect函數(shù)取交集
result3=fintersect(setDT(df1), setDT(df2))
#保存交集結(jié)果
write.table(file="intersect3.txt",result3,quote=F,row.names = F,sep="\t")
#查看跟第一種方法得到的結(jié)果是否一致
all_equal(result1,result3)
#[1] TRUE

參考資料:
R數(shù)據(jù)框如何取交集