代码之家  ›  专栏  ›  技术社区  ›  sdhaoui

基于二进制矩阵的两列创建列联表[副本]

  •  1
  • sdhaoui  · 技术社区  · 9 年前

    我有一个二进制矩阵:

          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的二进制矩阵的两列为两组创建列联表?i、 例如,我想要这个表格格式:

       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 回复  |  直到 7 年前
        1
  •  1
  •   nicola    9 年前

    您可以尝试:

    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
    
        2
  •  0
  •   DatamineR    9 年前

    一个嵌套的 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