【问题标题】:Getting Conditional Subset of Contingency Table获取列联表的条件子集
【发布时间】:2014-01-30 12:27:06
【问题描述】:

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

提前知道要保留哪些数据项,如何选择数据的子集?比如一个小表,里面有一部分数据是:

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")

【问题讨论】:

  • 您想从顶部提取表的子集还是更复杂的东西?你能举一个你想要达到的结果的例子吗?我猜,n &lt;- c("zz", "Zz", "zZ", "ZZ"); my.tab[n, n] 不是你想要的。
  • 啊,那是完全正确 - 我尝试了大约一百种不同的东西!谢谢马克,非常感谢。如果您可以将其作为正式答案提出,我会很乐意将其标记为已回答:-)

标签: r subset contingency


【解决方案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

【讨论】:

    猜你喜欢
    • 2020-07-18
    • 2018-10-22
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多