基于二列矩阵的两列

时间:2016-01-07 16:05:42

标签: r matrix binary contingency

我有一个二进制矩阵:

      S1 S2 S3 S4 S5 D1 D2 D3 D4
obs1  0  0  0  1  0  0  1  0  0
obs2  0  1  0  0  0  1  0  0  0
obs3  0  0  1  0  0  0  0  1  0
obs4  0  0  0  1  0  0  1  0  0
obs5  0  1  0  0  0  0  1  0  0
obs6  0  0  0  1  0  0  1  0  0

矩阵的每一行必须包含S组的值1(S1,S2,S3,S4或S5)和D组的值1(D1,D2,D3或D4)。

如何根据值1显示的二进制矩阵的两列为两组创建列联表?即,我想有这种表格格式:

   D1 D2 D3 D4
S1 0  0  0  0
S2 1  1  0  0
S3 0  0  1  0
S4 0  3  0  0
S5 0  0  0  0

这里,例如,值3来自obs1,obs4和obs6,其中情侣(S4,D2)同时取1作为值。

2 个答案:

答案 0 :(得分:1)

您可以尝试:

table(cbind.data.frame(
  S=factor(max.col(x[,1:5]),levels=1:5,labels=paste0("S",1:5)),
  D=factor(max.col(x[,6:9]),levels=1:4,labels=paste0("D",1:4))
))
#    D
#S    D1 D2 D3 D4
#  S1  0  0  0  0
#  S2  1  1  0  0
#  S3  0  0  1  0
#  S4  0  3  0  0
#  S5  0  0  0  0

答案 1 :(得分:0)

嵌套apply

 t(apply(df[2:6], 2, function(x) apply(df[7:10], 2, function(y) sum(x==1 & y ==1))))
   D1 D2 D3 D4
S1  0  0  0  0
S2  1  1  0  0
S3  0  0  1  0
S4  0  3  0  0
S5  0  0  0  0