您可以用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