[英]Group low counts in tidyverse R
我目前正在處理一個包含 714 行的 tibble 格式的數據集(每行對應一個特定於給定病毒的新序列,但如果有意義的話,多個序列來自同一病毒)。
因此,如果您查看數據,例如有 21 個 B19 序列。
我想在我的 tibble 中創建一個新專欄,我將所有存在幾次(低於 50 計數)的病毒株歸為一組(“其他”),並且所有具有高計數的病毒株都保留在它們自己的組中所以CMV就是CMV。 因此,這將是一個新列添加到小標題中,每次出現低計數菌株時,“newID”將是其他列(見圖 1)。 到現在為止,我使用了'mutate(newID = case_when(Origin == "CMV" ~ "CMV") 然后根據計數手動對其進行分組(參見數據圖),但應該有一個更容易和更少的“硬編碼”選項,對吧?
數據:
1 B19 21
2 BKPyV 8
3 CMV 161
4 Covid-19 68
5 EBV 204
6 FLU-A 22
7 HAdV-C 10
8 hCoV 84
9 HHV-1 27
10 HHV-2 3
11 HHV-6B 1
12 HIV-1 18
13 HMPV 3
14 HPV 37
15 JCPyV 4
16 NWV 12
17 unknown 9
18 VACV 9
19 VZV 13
我希望你能幫忙!
您可以使用fct_lump()
package (tidyverse) 中的forcats
()。
根據您的統計,我正在使用排名前 4 的病毒:
library(forcats)
data %>%
mutate(virus = as.factor(virus)) %>%
mutate(newID = fct_lump(virus, 4, w = count))
Output 是:
# A tibble: 19 × 4
id virus count newID
<dbl> <fct> <dbl> <fct>
1 1 B19 21 Other
2 2 BKPyV 8 Other
3 3 CMV 161 CMV
4 4 Covid-19 68 Covid-19
5 5 EBV 204 EBV
6 6 FLU-A 22 Other
7 7 HAdV-C 10 Other
8 8 hCoV 84 hCoV
9 9 HHV-1 27 Other
10 10 HHV-2 3 Other
11 11 HHV-6B 1 Other
12 12 HIV-1 18 Other
13 13 HMPV 3 Other
14 14 HPV 37 Other
15 15 JCPyV 4 Other
16 16 NWV 12 Other
17 17 unknown 9 Other
18 18 VACV 9 Other
19 19 VZV 13 Other
我用了:
library(dplyr)
data <- tribble(
~id, ~virus, ~count,
1, "B19" , 21,
2, "BKPyV" , 8,
3, "CMV" , 161,
4, "Covid-19", 68,
5, "EBV" , 204,
6, "FLU-A" , 22,
7, "HAdV-C" , 10,
8, "hCoV" , 84,
9, "HHV-1" , 27,
10, "HHV-2" , 3,
11, "HHV-6B" , 1,
12, "HIV-1" , 18,
13, "HMPV" , 3,
14, "HPV" , 37,
15, "JCPyV" , 4,
16, "NWV" , 12,
17, "unknown" , 9,
18, "VACV" , 9,
19, "VZV" , 13
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.