从非对称矩阵(或数据帧)到具有R的对称方阵

时间:2012-09-25 21:59:21

标签: r dataframe symmetric

鉴于此data.frame:'sample',代表物种之间的成对胜负:

     sp1<-c(0,1,0)
     sp3<-c(1,2,2)
     sp5<-c(3,1,0)
     sample<-as.data.frame(cbind(sp1,sp3,sp5))
     rownames(sample)<-c("sp1","sp6","sp8")

应该是这样的:

    sp1 sp3 sp5
sp1   0   1   3
sp6   1   2   1
sp8   0   2   0

如何修改'sample'以使其具有与rownames相同的列名,反之亦然,并用零填充添加的列或行,以使数据帧对称,如下所示? (我更喜欢数据帧,因为我担心我对矩阵不好):

    sp1 sp3 sp5 sp6 sp8
sp1   0   1   3   0   0
sp3   0   0   0   0   0
sp5   0   0   0   0   0
sp6   1   2   1   0   0
sp8   0   1   0   0   0

真实数据有大约150行和列,所以我真的不想要  用excel手动完成。这种格式需要应用一些有关竞争物种相互作用结果的其他函数(列:胜利,行:损失)。

1 个答案:

答案 0 :(得分:3)

您显示的输出似乎不是对称矩阵,但如果所需的输出是您正在寻找的,这里有一种方法可以通过使用{{1 }和stack。制作“正方形”矩阵的关键是确保行和列名称是“因子”。

xtabs