我如何计算患者基因的每个表达水平并计算它们的频率

How can I count each of expression levels of genes across patients and compute the frequency of them

我有一个包含 566 个基因和 208 个患者的数据,经过几次尝试,我把我的数据变成了这样的东西:

这是上述数据框的可重现数据'df1':

structure(list(Genes = c("ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2",  "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2",  "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2",  "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2",  "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2",  "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2",  "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2",  "ERLIN2", "ERLIN2", "ERLIN2", "ERLIN2"), Patients = c("TCGA-A1-A0SE-01",  "TCGA-A1-A0SH-01", "TCGA-A1-A0SJ-01", "TCGA-A1-A0SK-01", "TCGA-A1-A0SM-01",  "TCGA-A1-A0SO-01", "TCGA-A1-A0SP-01", "TCGA-A2-A04R-01", "TCGA-A2-A0CT-01",  "TCGA-A2-A0EN-01", "TCGA-A2-A0EU-01", "TCGA-A2-A0ST-01", "TCGA-A2-A0SU-01",  "TCGA-A2-A0SV-01", "TCGA-A2-A0SW-01", "TCGA-A2-A0SX-01", "TCGA-A2-A0SY-01",  "TCGA-A2-A0T0-01", "TCGA-A2-A0T1-01", "TCGA-A2-A0T2-01", "TCGA-A2-A0T4-01",  "TCGA-A2-A0T5-01", "TCGA-A2-A0T6-01", "TCGA-A2-A0T7-01", "TCGA-A2-A0YC-01",  "TCGA-A2-A0YD-01", "TCGA-A2-A0YE-01", "TCGA-A2-A0YF-01", "TCGA-A2-A0YG-01",  "TCGA-A2-A0YH-01", "TCGA-A2-A0YI-01", "TCGA-A2-A0YJ-01", "TCGA-A2-A0YK-01",  "TCGA-A2-A0YL-01", "TCGA-A2-A0YM-01", "TCGA-A2-A0YT-01", "TCGA-A7-A0D9-01",  "TCGA-A7-A13D-01", "TCGA-A7-A13E-01", "TCGA-A7-A13F-01", "TCGA-A8-A075-01",  "TCGA-A8-A08O-01", "TCGA-A8-A0A6-01", "TCGA-A8-A0AD-01", "TCGA-AN-A0XL-01",  "TCGA-AN-A0XN-01", "TCGA-AN-A0XO-01", "TCGA-AN-A0XP-01", "TCGA-AN-A0XR-01",  "TCGA-AN-A0XS-01"), levels = structure(c(ERLIN2 = 1L, ERLIN2 = 1L,  ERLIN2 = 1L, ERLIN2 = 1L, ERLIN2 = 1L, ERLIN2 = 1L, ERLIN2 = 1L,  ERLIN2 = 2L, ERLIN2 = 1L, ERLIN2 = 2L, ERLIN2 = 2L, ERLIN2 = 1L,  ERLIN2 = 2L, ERLIN2 = 1L, ERLIN2 = 2L, ERLIN2 = 1L, ERLIN2 = 1L,  ERLIN2 = 1L, ERLIN2 = 1L, ERLIN2 = 1L, ERLIN2 = 1L, ERLIN2 = 2L,  ERLIN2 = 2L, ERLIN2 = 1L, ERLIN2 = 2L, ERLIN2 = 2L, ERLIN2 = 2L,  ERLIN2 = 2L, ERLIN2 = 1L, ERLIN2 = 2L, ERLIN2 = 1L, ERLIN2 = 1L,  ERLIN2 = 2L, ERLIN2 = 2L, ERLIN2 = 1L, ERLIN2 = 1L, ERLIN2 = 2L,  ERLIN2 = 1L, ERLIN2 = 2L, ERLIN2 = 2L, ERLIN2 = 1L, ERLIN2 = 1L,  ERLIN2 = 1L, ERLIN2 = 2L, ERLIN2 = 1L, ERLIN2 = 2L, ERLIN2 = 2L,  ERLIN2 = 1L, ERLIN2 = 2L, ERLIN2 = 1L), .Label = c("down", "up" ), class = "factor")), row.names = c(NA, -50L), class = c("grouped_df",  "tbl_df", "tbl", "data.frame"), groups = structure(list(Genes = c("ERLIN2",  "ERLIN2"), levels = structure(1:2, .Label = c("down", "up"), class = "factor"), 
    .rows = list(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 9L, 12L, 14L, 
    16L, 17L, 18L, 19L, 20L, 21L, 24L, 29L, 31L, 32L, 35L, 36L, 
    38L, 41L, 42L, 43L, 45L, 48L, 50L), c(8L, 10L, 11L, 13L, 
    15L, 22L, 23L, 25L, 26L, 27L, 28L, 30L, 33L, 34L, 37L, 39L, 
    40L, 44L, 46L, 47L, 49L))), row.names = c(NA, -2L), class = c("tbl_df",  "tbl", "data.frame"), .drop = TRUE))

'Genes' 列:基因名称

'Patients' 列:患者

'levels' 列:所考虑的 566 个基因中每个基因的表达水平,包括两个水平之一:'up' 或 'down' 患者

现在,我想创建一个 data.frame 'df2' 列 'total',这包括每个基因每个表达水平的患者总数;和一列'frequency' =(每个基因每个表达水平的患者总数)/ 208(即患者总数)

看起来像,例如:

Genes-----levels-----total----frequency

ERLIN2----up----------50-----24.03%

ERLIN2----down------11-----5.28%

HER2------up----------15-----7.21%

HER2------down--------45-----21.63%

....

如有任何帮助,我们将不胜感激。谢谢!

这是一个使用您的示例数据的快速 tidyverse 解决方案

library(tidyverse) # install.packages("tidyverse")

data %>% 
  count(Genes, levels, name = "total") %>%
  ungroup() %>% 
  mutate(frequency = total / sum(total, na.rm = TRUE))

也许您可以通过 table

尝试基本的 R 选项
df1out <- transform(as.data.frame.table(table(df1[-2])),
    total = Freq,
    Freq = Freq / nrow(df1)
)