获取列联表的条件子集

时间:2014-01-11 13:29:19

标签: r subset contingency

我有一些数据,我总结为列联表。数据中有几个条目缺失或错误值。根据下面的代码使用表构建表是非常有用的,因为我可以通过检查看到有多少数据丢失或无意义。

事先知道我想保留哪些数据项,如何选择数据的子集?例如,包含部分数据的小表是:

my.tab <- table(sm.pos.grp, sm.neg.grp)

      sm.neg.grp
sm.pos.grp  zz  Zz  ZZ
        00   0   9   1
        zz   0   0  31
        Zz  11   5   7
        ZZ   0  77 211

我只对zzZZZz条目感兴趣,因此我可以像这样提取表格的相关子集:

my.tab[, 2:4]

      sm.neg.grp
sm.pos.grp zz Zz ZZ
        zz  0  1  0
        Zz  0 10  7
        ZZ  3  7 21

但是,完整的数据集更复杂:

        full.pos.grp
full.neg.grp   00   zz   zZ   Zz   ZZ ZTRUE TRUEz TRUEZ TRUEFalse
   00           0    0    0    0    4     0     0     0         0
   zz           5  126  140  151  258    15     0     0         0
   zZ           3  123  547    0  616     0     0     0         0
   Zz           2  120    0  513  572     0     0     2         0
   ZZ          19  277  642  293 2286     0     5    28         0
   TRUEz        0    0    0    1    3     0     0     0         0
   TRUEZ        0    9    0    2   18     0     1    16         1
   TRUEFalse    0    0    0    0    0     1     0     1         0

如何仅通过引用将表格子集化为zzZzzZZZ?使用as.data.frame(my.tab)转换为数据框会丢失表格结构,我似乎无法为tapply获取正确的语法(例如,我尝试tapply(sm.neg.grp, sm.pos.grp, sum)之类的内容但没有成功)。任何帮助非常感谢!

以下是表格的dput命令:

> dput(my.tab)
structure(c(0L, 0L, 11L, 0L, 9L, 0L, 5L, 77L, 1L, 31L, 7L, 211L), .Dim = c(4L, 
3L), .Dimnames = structure(list(sm.pos.grp = c("00", "zz", "Zz", 
"ZZ"), sm.neg.grp = c("zz", "Zz", "ZZ")), .Names = c("sm.pos.grp", 
"sm.neg.grp")), class = "table")  

> dput(the.table)
structure(c(0L, 5L, 3L, 2L, 19L, 0L, 0L, 0L, 0L, 126L, 123L, 
120L, 277L, 0L, 9L, 0L, 0L, 140L, 547L, 0L, 642L, 0L, 0L, 0L, 
0L, 151L, 0L, 513L, 293L, 1L, 2L, 0L, 4L, 258L, 616L, 572L, 2286L, 
3L, 18L, 0L, 0L, 15L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 
5L, 0L, 1L, 0L, 0L, 0L, 0L, 2L, 28L, 0L, 16L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 1L, 0L), .Dim = 8:9, .Dimnames = structure(list(full.case.grp = c("00", 
"zz", "zZ", "Zz", "ZZ", "TRUEz", "TRUEZ", "TRUEFalse"), full.ctrl.grp = c("00", 
"zz", "zZ", "Zz", "ZZ", "ZTRUE", "TRUEz", "TRUEZ", "TRUEFalse")), 
.Names = c("full.neg.grp", "full.pos.grp")), class = "table")

1 个答案:

答案 0 :(得分:1)

要通过引用对表进行子集化(按列和行名称排序),您可以直接在方括号内输入名称。

n <- c("zz", "Zz", "zZ", "ZZ")
my.tab[n, n]

            full.pos.grp
full.neg.grp  zz  Zz  zZ   ZZ
          zz 126 151 140  258
          Zz 120 513   0  572
          zZ 123   0 547  616
          ZZ 277 293 642 2286