R數(shù)據(jù)框如何取交集

前面給大家介紹過了

?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ù)框如何取交集

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容