您可以用table
功能實現這一點:
> table(tab$gene1, tab$gene2)
ACHE ADK ADORA1 ADRA1A ADRA1B ADRA1D ADRA2A ADRA2B ADRB1 ADRB2 AGTR1 ASIC1
ADRA1A 0 1 0 0 0 0 0 0 0 0 0 0
ADRA1B 0 1 0 0 0 0 0 0 0 0 0 0
ADRA1D 0 1 0 0 0 0 0 0 0 0 0 0
ADRB1 0 1 0 0 0 0 0 0 0 0 0 1
ADRB2 0 1 0 0 0 0 0 0 0 0 0 1
AGTR1 1 1 0 0 0 0 0 0 0 0 0 0
ALOX5 0 0 0 0 0 0 0 0 1 1 0 0
ALPPL2 0 0 0 0 0 0 0 0 1 1 0 0
AMY2A 0 0 0 0 0 0 0 0 0 0 1 0
AR 0 0 1 1 1 1 1 1 0 0 0 0
使用as.matrix
如果你想有一個矩陣結構。
編輯##:對於一個對稱矩陣。
要在使用table
時生成對稱矩陣,您需要兩個參數具有相同的水平,這裏的值不是因素,而是字符串,然後沒有水平,但它是相同的東西。您至少需要在基因2中發現每個獨特基因1,反之亦然。
因此,我建議你創建一個載體與你所有的基因(我用sort(unique(c(unique(tab$gene1), unique(tab$gene2))))
)。
我合併了「gene1」與這個向量保持所有沒有對應的事件,它會產生NA而不是與某些東西連接。 「gene2」同樣的事情。
現在,您已在「gene1」和「gene2」中擁有至少一個可能的每個基因,並且您可以使用table
。
genes <- c('ACHE','ADK','ADORA1','ADRA1A','ADRA1B','ADRA1D','ADRA2A','ADRA2B','ADRB1','ADRB2','AGTR1','ALOX5','ALPPL2','AMY2A','AR','ASIC1')
df <- merge(tab, as.data.frame(genes), by.x = "gene1", by.y = "genes", all = TRUE)
df <- merge(df, as.data.frame(genes), by.x = "gene2", by.y = "genes", all = TRUE)
> table(df$gene1, df$gene2)
ACHE ADK ADORA1 ADRA1A ADRA1B ADRA1D ADRA2A ADRA2B ADRB1 ADRB2 AGTR1 ALOX5 ALPPL2 AMY2A AR ASIC1
ACHE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ADK 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ADORA1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ADRA1A 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ADRA1B 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ADRA1D 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ADRA2A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ADRA2B 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ADRB1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
ADRB2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
AGTR1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ALOX5 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0
ALPPL2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0
AMY2A 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
AR 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0
ASIC1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
希望得到這個幫助,這可能不是最好的辦法。
你想從'reshape2'改用'dcast'(或'acast')來代替。 'reshape'是一箇舊的包 – rawr