1

我有一个二进制矩阵:

      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 组(S1、S2、S3、S4 或 S5)的值 1 和 D 组(D1、D2、D3 或 D4)的值 1。

如何根据出现值 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 作为值。

4

2 回答 2

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
于 2016-01-07T16:15:36.113 回答
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
于 2016-01-07T16:22:36.057 回答