tidyverse R 中的组低计数

Group low counts in tidyverse R

我目前正在处理一个包含 714 行的 tibble 格式的数据集(每行对应一个特定于给定病毒的新序列,但如果有意义的话,多个序列来自同一病毒)。

因此,如果您查看数据,例如21 个 B19 序列。

我想在我的 tibble 中创建一个新专栏,我将所有存在几次(低于 50 计数)的病毒株归为一组(“其他”),并且所有具有高计数的病毒株都保留在每个自己的组,所以 CMV 是 CMV。因此,这将是添加到 tibble 的新列,每当出现低计数应变时,'newID' 将是其他列(见图 1)。 到现在为止,我使用了 'mutate(newID = case_when(Origin == "CMV" ~ "CMV") 然后根据计数手动对其进行分组(参见数据图),但应该有一个更容易和更少的 'hard-coding'选项对吧?

数据:

 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

希望对您有所帮助!

您可以使用 forcats 包 (tidyverse) 中的 fct_lump()

根据您的统计,我正在使用排名前 4 的病毒:

library(forcats)
data %>% 
  mutate(virus = as.factor(virus)) %>% 
  mutate(newID = fct_lump(virus, 4, w = count))

输出为:

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