基于二元矩阵的两列创建意外事件 table
Creation of a contingency table based on two columns of a binary matrix
我有一个二进制矩阵:
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 的二进制矩阵的两列为两个组创建意外事件 table?即,我想要这种 table 格式:
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作为值。
你可以试试:
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
嵌套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
我有一个二进制矩阵:
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 的二进制矩阵的两列为两个组创建意外事件 table?即,我想要这种 table 格式:
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作为值。
你可以试试:
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
嵌套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