我有一个二进制矩阵:
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作为值。
答案 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