r - 基于从查找表中搜索向数据框中添加新的基因名称列
问题描述
我对在 R 中工作非常陌生,昨天大部分时间都在试图从这里的其他问题和指南中弄清楚这一点,而没有走得太远。
我有一个RNAseq 表达值表及其 transcript_id(例如 TraesCS5B02G127900.1)。我想通过在transcript_id (例如TraesCS5B02G127900)中搜索gene_id 的查找表向该表添加一个新列,并在新列中添加相应的Gene.name(例如ENA1)和gene_id。
这是我的表达式表的一部分(包含更多行):
transcript_id sigma_sq_pmax iqr failed_ise
1 TraesCS1B02G306500.1 9.259216e-01 TRUE FALSE
2 TraesCS1B02G433800.1 0.000000e+00 FALSE FALSE
3 TraesCS2A02G284700.1 0.000000e+00 FALSE FALSE
4 TraesCS2A02G336600.1 1.582308e-02 FALSE FALSE
5 TraesCS2A02G390800.1 2.236139e-01 FALSE FALSE
6 TraesCS2A02G391000.1 4.609996e-01 TRUE FALSE
7 TraesCS2A02G391000.2 4.378863e+00 FALSE FALSE
8 TraesCS2A02G391000.3 0.000000e+00 FALSE FALSE
9 TraesCS2A02G410400.1 0.000000e+00 FALSE FALSE
10 TraesCS2A02G424200.2 3.831211e-01 TRUE FALSE
这是我的查找表的一部分,其中包含我的gene_id 和gene.names(再次包含更多行):
Gene.name gene_id
1 ENA1 TraesCS5B02G127900
2 ENA1 TraesCS5D02G136800
3 ENA1 TraesCS5A02G129300
4 ENA2/OS10G0434900 TraesCS7A02G427700
5 ENA2/OS10G0434900 TraesCS4A02G414400
6 ENA2/OS10G0434900 TraesCS4B02G315100
7 ENA2/OS10G0434900 TraesCS4D02G332100
8 ENA2/OS10G0434900 TraesCS4B02G336400
9 ENA2/OS10G0434900 TraesCS7D02G420100
10 ENA2/OS10G0434900 TraesCS7B02G327900
我想创建一个新表,通过搜索其中包含gene_id的transcript_id将Gene.name和gene_id列添加到表达式表中。
例如,这就是我希望它看起来的样子:
Gene.name gene_id target_id sigma_sq_pmax iqr failed_ise
1 OsZIP5 TraesCS1B02G306500 TraesCS1B02G306500.1 0.92592155 TRUE FALSE
2 OsABCC1 TraesCS1B02G433800 TraesCS1B02G433800.1 0.00000000 FALSE FALSE
3 OsYSL6 TraesCS2A02G284700 TraesCS2A02G284700.1 0.00000000 FALSE FALSE
4 OsVIT1 TraesCS2A02G336600 TraesCS2A02G336600.1 0.01582308 FALSE FALSE
5 OsYSL16 TraesCS2A02G390800 TraesCS2A02G390800.1 0.22361394 FALSE FALSE
6 OsYSL9 TraesCS2A02G391000 TraesCS2A02G391000.1 0.46099961 TRUE FALSE
7 OsYSL9 TraesCS2A02G391000 TraesCS2A02G391000.2 4.37886316 FALSE FALSE
8 OsYSL9 TraesCS2A02G391000 TraesCS2A02G391000.3 0.00000000 FALSE FALSE
9 OsHMA5 TraesCS2A02G410400 TraesCS2A02G410400.1 0.00000000 FALSE FALSE
10 OsZIP3 TraesCS2A02G424200 TraesCS2A02G424200.2 0.38312110 TRUE FALSE
我非常感谢您对此的任何帮助,谢谢:)
解决方案
一种tidyverse
方法可能看起来像这样。第一步涉及transcript_id
在包含 的列中进行分离,gene_id
然后 使用。在第二步中,您可以使用加入表达式并查找表。但是,该列仅包含s,因为在给定的示例数据中不匹配。no
.
tidyr::separate
gene_id
dplyr::left_join
Gene.name
NA
library(dplyr)
library(tidyr)
expression_table %>%
tidyr::separate(transcript_id, into = c("gene_id", "no"), sep = "\\.", remove = FALSE) %>%
dplyr::left_join(lookup_table)
#> Joining, by = c("row", "gene_id")
#> Warning: Column `gene_id` joining character vector and factor, coercing into
#> character vector
#> row transcript_id gene_id no sigma_sq_pmax iqr
#> 1 1 TraesCS1B02G306500.1 TraesCS1B02G306500 1 0.92592160 TRUE
#> 2 2 TraesCS1B02G433800.1 TraesCS1B02G433800 1 0.00000000 FALSE
#> 3 3 TraesCS2A02G284700.1 TraesCS2A02G284700 1 0.00000000 FALSE
#> 4 4 TraesCS2A02G336600.1 TraesCS2A02G336600 1 0.01582308 FALSE
#> 5 5 TraesCS2A02G390800.1 TraesCS2A02G390800 1 0.22361390 FALSE
#> 6 6 TraesCS2A02G391000.1 TraesCS2A02G391000 1 0.46099960 TRUE
#> 7 7 TraesCS2A02G391000.2 TraesCS2A02G391000 2 4.37886300 FALSE
#> 8 8 TraesCS2A02G391000.3 TraesCS2A02G391000 3 0.00000000 FALSE
#> 9 9 TraesCS2A02G410400.1 TraesCS2A02G410400 1 0.00000000 FALSE
#> 10 10 TraesCS2A02G424200.2 TraesCS2A02G424200 2 0.38312110 TRUE
#> failed_ise Gene.name
#> 1 FALSE <NA>
#> 2 FALSE <NA>
#> 3 FALSE <NA>
#> 4 FALSE <NA>
#> 5 FALSE <NA>
#> 6 FALSE <NA>
#> 7 FALSE <NA>
#> 8 FALSE <NA>
#> 9 FALSE <NA>
#> 10 FALSE <NA>
由reprex 包(v0.3.0)于 2020-04-18 创建
推荐阅读
- apache-kafka - 卡夫卡消费者长时间闲置后不消费
- python - 如何在 Python 中将默认的 Class 类型参数设置为 null?
- python - 如何忽略以前的输入?
- sql-server - SQL Server如何传递其他表的值
- javascript - 无法验证表单中的第一个条目
- components - 在 Sparx Enterprise Architect (EA) 中将嵌套组件拖入图表
- php - 如何为 WooCommerce 生成随机订单号?
- javascript - 为什么从Vue.js中的列表中删除项目时移动转换需要绝对位置
- javascript - 我想使用文本框输入数学表达式
- intellij-idea - 新手无法在 IntelliJ 中使用带有 FXML 的 Gluon 多视图正确运行或调试新项目