前面給大家介紹過(guò)了
?R批量預(yù)測(cè)miRNA和靶基因之間的調(diào)控關(guān)系-ENCORI篇
?R批量預(yù)測(cè)miRNA和靶基因之間的調(diào)控關(guān)系-TargetScan篇
有小伙伴拿自己的數(shù)據(jù)試了一下,反饋預(yù)測(cè)結(jié)果太多了弯淘。一般對(duì)于多個(gè)數(shù)據(jù)庫(kù)或者多個(gè)軟件預(yù)測(cè)的結(jié)果蚯舱,可以通過(guò)取交集來(lái)提高預(yù)測(cè)結(jié)果的可信度,并且這樣也能大大減少最后預(yù)測(cè)結(jié)果的數(shù)目嚷闭。
我們前面介紹過(guò)?RNA相互作用神器——ENCORI悔醋,這個(gè)數(shù)據(jù)庫(kù)就提供多個(gè)miRNA靶基因預(yù)測(cè)軟件的預(yù)測(cè)結(jié)果谎碍。你可以在查詢miRNA靶基因的時(shí)候限定使用哪些預(yù)測(cè)軟件(如下圖紅圈所示)卤恳,這樣得到的結(jié)果就是多個(gè)預(yù)測(cè)軟件預(yù)測(cè)結(jié)果的交集累盗。這里需要注意,限定的軟件越多突琳,得到的結(jié)果會(huì)越少若债,也有可能完全得不到結(jié)果,所以這個(gè)需要根據(jù)自己數(shù)據(jù)的實(shí)際情況確定拆融。
那么我們?cè)趺蠢肦代碼來(lái)對(duì)miRNA預(yù)測(cè)結(jié)果取交集呢蠢琳?
我們知道一般在R里,對(duì)向量取交集镜豹,直接用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
那么如果想對(duì)R里面的數(shù)據(jù)框取交集該如何操作呢?miRNA預(yù)測(cè)結(jié)果都是兩列的數(shù)據(jù)框趟脂。
我們首先來(lái)創(chuàng)建兩個(gè)數(shù)據(jù)框泰讽,模擬一下不同的軟件的預(yù)測(cè)結(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ù)來(lái)對(duì)數(shù)據(jù)框取交集,結(jié)果是不對(duì)的
而我們希望得到的結(jié)果是對(duì)兩列都取交集昔期。
下面給大家介紹三種對(duì)R數(shù)據(jù)框取交集的方法
方法一菇绵、我們將各列的信息合并成一個(gè)字符串,然后取交集
#將各列的信息用_連接起來(lái)
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ù)對(duì)數(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ù)框如何取交集