【发布时间】: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
我只对zz、ZZ 和Zz 条目感兴趣,所以我可以像这样提取表的相关子集:
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
如何仅通过引用 zz、Zz、zZ 和 ZZ 来对表进行子集化?使用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 <- c("zz", "Zz", "zZ", "ZZ"); my.tab[n, n]不是你想要的。 -
啊,那是完全正确 - 我尝试了大约一百种不同的东西!谢谢马克,非常感谢。如果您可以将其作为正式答案提出,我会很乐意将其标记为已回答:-)
标签: r subset contingency