提取与每个基因符号匹配的读数计数

时间:2019-04-10 10:50:28

标签: r loops rna-seq

我已经用Salmon量化了基因表达,这使我获得了Ensembl转录本,我将Ensembl转录本转化为基因符号,但对于某些基因,我却拥有多个转录本。我尝试使用tximport程序包将读取的计数折叠成基因,但是由于注释不一样,我发现它太难了。

Name                NumReads
ENST00000355520.5   407.186
ENST00000566753.1   268.879
ENST00000481617.2   242.25
ENST00000538183.2   226.576

ensembltranscript_id gene_name
ENST00000482226.2   FCGR2C
ENST00000508651.1   FCGR2C
ENST00000571914.1   TSPAN10
ENST00000571707.1   TSPAN10
ENST00000534817.1   OVCH2
ENST00000445557.1   OR52E1
ENST00000575319.1   CYP2D7
ENST00000576465.1   CYP2D7
  

编辑

这是鲑鱼读取计数的输出

https://www.dropbox.com/s/7bkril0v6sw7v9z/Salmon_output.txt?dl=0

这是我将鲑鱼输出中的笔录ID转换为基因名称的时候

https://www.dropbox.com/s/m1iybfbu2i4bb39/Converting_transcript_id_to_gene_id.txt?dl=0

1 个答案:

答案 0 :(得分:1)

您可以使用软件包dplyr。

创建测试表:

names = c("ensembltranscript_id",  "gene_name", "NumReads")
transcripts = c("ENST00000482226.2", "ENST00000508651.1", "ENST00000571914.1", "ENST00000571707.1", "ENST00000534817.1")
gene_names = c("FCGR2C", "FCGR2C", "TSPAN10", "TSPAN10", "OVCH2")
reads = c(205.56, 456.21, 123.3, 52.6, 268.45)

data = data.frame(transcripts, gene_names, reads)
names(data) = names

进行计算:

result = data %>% 
  group_by(gene_name) %>% 
  summarise(sum(NumReads)) %>%
  mutate_if(is.numeric, format, 2)

打印结果:

# A tibble: 3 x 2
  gene_name `sum(NumReads)`
  <fct>     <chr>          
1 FCGR2C    661.77         
2 OVCH2     268.45         
3 TSPAN10   175.90

希望这会有所帮助。

编辑:

如《 OP》的评论所述,预期的输出将有所帮助。 抱歉,在这种情况下,我可能误解了“崩溃”。我的解释是将每个基因名称的读数相加。

编辑2:

如我的评论中所述,请尝试阻止提供链接。链接可能断开等。有关如何撰写好的帖子的完整说明,请参见:here

但是,请根据您的真实数据执行以下操作:

加载数据:

salmon_reads = read.table(file = "/path/to/Salmon_output.txt", header = T, sep = "\t")
genes = read.table(file = "/path/to/Converting_transcript_id_to_gene_id.txt", header = T, sep = "\t")

仅通过transcript-id合并数据

merged_data = merge(x = salmon_reads, y = genes, by.x = colnames(salmon_reads)[1], by.y = colnames(genes)[1], all = T)

进行计算和减少读数的顺序:

result = merged_data %>% 
  group_by(external_gene_name) %>% 
  summarise(sum(NumReads)) %>%
  mutate_if(is.numeric, format, 2)

result$`sum(NumReads)` = as.numeric(result$`sum(NumReads)`)
result = result[order(result$`sum(NumReads)`, decreasing = T),]

您没有提到如何处理NA。在这种情况下,对所有不适用的基因名的读数进行汇总。这就是为什么NA​​读取次数最多的原因。