2014-01-11 42 views
1

我有一些數據,我將其概括爲應急表。數據中有幾個條目缺失或錯誤值。根據下面的代碼,使用表格構建表格非常有用,因爲通過檢查可以看出有多少數據丟失或無意義。獲取應急表的條件子集

事先知道我想保留哪些數據項,我該如何選擇數據的一個子集?例如,一張小桌子與數據的部分是:

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 

我怎麼能子集表參照僅zzZz,zZZZ?使用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") 
+0

你想要提取一個表的子集或任何更復雜的?你能舉一個你想達到的結果的例子嗎?我猜,'n < - c(「zz」,「Zz」,「zZ」,「ZZ」); my.tab [n,n]'不是你想要的。 –

+0

啊,那*完全是*它 - 我嘗試了一百種不同的東西!謝謝Mark,非常感謝。如果你可以把它作爲正式的答案,我會很高興地標記它回答:-) – HypersonicNinja

回答

1

參考子集的表(即由柱和rownames),你可以在方括號內直接輸入名字。

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