r - 如何匹配两个不同表的列中的值以提取 R 中第二个表的不同列中的对应值?
问题描述
我知道这是一个基本的事情,肯定已经被问到了,但我找不到适合我正在寻找的东西,而且我在 R 中有点生疏。
我有一个名为的表snpMap
,其中包含两组基因组坐标,一组是旧的,另一组是新的。我有一个输出表,它意外地以旧的基因组坐标格式编码,称为bim
. 我想要做的是匹配两个不同表之间的列,基于它们共同的“旧”基因组坐标列,然后从中提取“新”基因组坐标snpMap
并将它们放入bim
. 我知道这就像使用查找表一样,这是我以前做过的事情,但就像我说的,我有点生疏了。
因为基因组坐标被分解成单独的列,例如染色体和坐标,我将它们连接到两个表中以使过程更容易一些:
snpMap$hg19_coords <- with(snpMap, paste0("chr", CHR, "-", POS))
snpMap$hg38_coords <- with(snpMap, paste0(chr_hg38, "-", pos_hg38))
bim$hg19_coords <- with(bim, paste0("chr", chr, "-", basepair))
哪里hg19
是旧的,哪里hg38
是新的。下面是参考表,snpMap
:
CHR SNP CM POS COUNTED ALT Type
rs4951929:757734:C:T 1 rs4951929:757734:C:T 0 757734 C T SNV
rs4951862:757936:C:A 1 rs4951862:757936:C:A 0 757936 C A SNV
rs3131954:758626:C:T 1 rs3131954:758626:C:T 0 758626 C T SNV
rs114111569:759837:T:A 1 rs114111569:759837:T:A 0 759837 T A SNV
rs112618790:777232:C:T 1 rs112618790:777232:C:T 0 777232 T C SNV
rs4040617 1 rs4040617 0 779322 G A SNV
newRef newCount name rsNumGuess chr_hg38
rs4951929:757734:C:T T C rs4951929 rs4951929 chr1
rs4951862:757936:C:A A C rs4951862 rs4951862 chr1
rs3131954:758626:C:T T C rs3131954 rs3131954 chr1
rs114111569:759837:T:A A T rs114111569 rs114111569 chr1
rs112618790:777232:C:T C T rs112618790 rs112618790 chr1
rs4040617 A G rs4040617 rs4040617 chr1
pos_hg38 hg19_coords hg38_coords
rs4951929:757734:C:T 822354 chr1-757734 chr1-822354
rs4951862:757936:C:A 822556 chr1-757936 chr1-822556
rs3131954:758626:C:T 823246 chr1-758626 chr1-823246
rs114111569:759837:T:A 824457 chr1-759837 chr1-824457
rs112618790:777232:C:T 841852 chr1-777232 chr1-841852
rs4040617 843942 chr1-779322 chr1-843942
旧坐标是CHR
and POS
(我已经连接到hg19_coords
),新坐标是chr_hg38
and (pos_hg38
我也连接到hg38_coords
)。
下面是输出表bim
:
> head(bim)
chr snp position basepair allele1 allele2 hg19_coords
1: 1 rs4951929:757734:C:T 0 757734 C T chr1-757734
2: 1 rs4951862:757936:C:A 0 757936 C A chr1-757936
3: 1 rs3131954:758626:C:T 0 758626 C T chr1-758626
4: 1 rs114111569:759837:T:A 0 759837 T A chr1-759837
5: 1 rs112618790:777232:C:T 0 777232 T C chr1-777232
6: 1 rs4040617 0 779322 G A chr1-779322
我想用作为“键”chr
的basepair
相应hg38
值替换列。hg19_coords
最终,我也想替换其中的值,snp
但那是另一回事。
我应该如何处理这个?这就是全部data.table
。
解决方案
可能是一个不优雅的解决方案,但这里是:
bimjoin <- bim %>%
left_join(snpMap, by = "hg19_coords") %>%
subset(., select = c("chr_hg38", "snp", "position", "pos_hg38", "allele1", "allele2"))
推荐阅读
- amazon-web-services - 恢复 AWS RDS 数据库但在“默认”以外的不同安全组中?
- reactjs - 无法在 @monaco-editor/react 中更改主题
- javascript - 未处理的拒绝 (SecurityError):尝试使用 history.pushState() 超过 100 次每 30 秒反应
- python - 是否可以在 tensorflow 中合并两个模型?
- python - 如何使用 Python 解码 Angular 的自定义 HTML 编码
- typescript - 使用 Typescript 泛型来限制函数输入参数
- user-interface - TabControl 和 ObservableCollection UI 刷新
- html - 如何在“脱落”图像的图像上添加文本
- python - 如何使用 Django ORM 增加 Django CharField(包含一个整数)?
- javascript - 每 5 秒调用一次 onChange 函数