簡體   English   中英

對按另一個因子分組的因子的每個級別進行計數

[英]Performing a count of each level of a factor grouping by another factor

我想要一個數據幀輸出,其中記錄了變量的 4 個級別(“是”和“否”)中的第 2 個。 我可以通過對是或否進行子集化和過濾來做到這一點,但我覺得必須有更好的方法來使用 dplyr

null.ta <- dbdata %>%
filter(MutGroup == "Null") %>%
group_by(ICD_Grouping) %>%
summarise(n()) %>%
spread(???????)

以上是我假設我必須在一定程度上做但不知道如何讓傳播函數為這個特定變量工作的內容。 我不介意是否包含所有 4 個級別,然后我可以在事后剪切幾列。

structure(list(ICD_Grouping = structure(c(50L, 50L, 33L, 33L, 
50L, 50L, 50L, 18L, 21L, 33L, 18L, 18L, 50L, 50L, 50L, 17L, 17L, 
17L, 17L, 17L, 17L, 50L, 50L, 50L, 50L, 18L, 18L, 16L, 50L, 50L, 
50L, 16L, 17L, 50L, 50L, 50L, 16L, 16L, 30L, 50L, 50L, 16L, 18L, 
17L, 50L, 50L, 50L, 50L, 50L, 50L, 21L, 30L, 21L, 18L, 21L, 21L, 
13L, 30L, 50L, 50L, 50L, 50L, 13L, 34L, 33L, 18L, 16L, 16L, 16L, 
16L, 18L, 10L, 34L, 37L, 34L, 34L, 18L, 33L, 33L, 18L, 18L, 37L, 
50L, 30L, 30L, 50L, 50L, 50L, 50L, 50L, 50L, 34L, 34L, 33L, 17L, 
14L, 19L, 33L, 18L, 18L, 18L, 50L, 30L, 30L, 30L, 34L, 18L, 18L, 
18L, 18L, 30L, 30L, 17L, 17L, 33L), .Label = c("", "C01-2", "C03-6", 
"C09-10", "C11", "C15", "C16", "C18-20", "C21", "C22", "C25", 
"C30-31", "C33-34", "C37-39", "C40-41", "C43", "C44", "C45", 
"C47/49", "C48", "C50", "C51", "C53", "C54-55", "C56", "C57-58", 
"C60", "C61", "C62", "C64", "C65-66/68", "C67", "C69", "C70", 
"C71", "C72", "C73", "C74-75", "C76.0", "C76.2", "C76.3", "C80", 
"C81", "C82-86", "C90.0", "C91.0", "C94.3/95", "D04", "D05", 
"D22", "D31", "D33", "D35"), class = "factor"), Immunohistochemistry = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 4L, 4L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 3L, 3L, 4L, 4L, 4L, 4L, 3L, 4L, 4L, 4L, 2L, 2L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L, 
2L, 4L, 4L, 2L, 4L, 4L, 4L, 4L, 2L, 4L, 2L, 4L, 4L, 4L, 4L, 3L, 
3L, 4L), .Label = c("", "N/A", "No", "Yes"), class = "factor")), row.names = c(NA, 
-115L), class = "data.frame")

我想要一個看起來像的輸出

ICD_Grouping Yes No N/A
C22           2   1   0
C45           7   3   1
C69           4   0   0

那是隨機數據的一個例子,而不是這個數據。 想要一個數據框,其中包含 ICD_Grouping 免疫組織化學中每個因子水平的計數。

如果我理解正確,我們可以使用基table來做到這一點:

table(dbdata)

table將顯示每個級別的結果(即使它不再存在於數據中),因此為了使表的大小合理,我們首先使用droplevels刪除未使用的級別:

table(droplevels(dbdata))

            Immunohistochemistry
ICD_Grouping N/A No Yes
      C22      0  0   1
      C33-34   0  0   2
      C37-39   1  0   0
      C43      0  2   7
      C44      1  2   8
      C45      2  0  17
      C47/49   1  0   0
      C50      0  1   4
      C64      0  0  10
      C69      7  0   2
      C70      1  0   6
      C73      0  1   1
      D22      8  0  30

可以使用以下方法將table轉換為具有相同結構的 data.frame:

table(droplevels(dbdata)) %>%
    as.data.frame.matrix() %>%
    tibble::rownames_to_column('ICD_Grouping')

或者如果你喜歡管道:

dbdata %>%
    droplevels() %>%
    table() %>%
    as.data.frame.matrix() %>%
    tibble::rownames_to_column('ICD_Grouping')

兩者都給出相同的data.frame結果:

   ICD_Grouping N/A No Yes
1           C22   0  0   1
2        C33-34   0  0   2
3        C37-39   1  0   0
4           C43   0  2   7
5           C44   1  2   8
6           C45   2  0  17
7        C47/49   1  0   0
8           C50   0  1   4
9           C64   0  0  10
10          C69   7  0   2
11          C70   1  0   6
12          C73   0  1   1
13          D22   8  0  30

這種形式是一個合適的數據框,可以在任何下游過程中使用,或者加入ICD_Grouping變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM