【问题标题】:How do I match values in columns of two different tables to extract corresponding values in a different column of the second table in R?如何匹配两个不同表的列中的值以提取 R 中第二个表的不同列中的对应值?
【发布时间】:2020-07-24 04:41:57
【问题描述】:

我知道这是一个基本的东西,肯定已经被问过了,但我找不到适合我正在寻找的东西,而且我对 R 有点生疏。

我有一个名为snpMap 的表,其中包含两组基因组坐标,一组是旧的,另一组是新的。我有一个输出表,它意外地以旧的基因组坐标格式编码,称为bim。我想要做的是匹配两个不同表之间的列,基于它们共同的“旧”基因组坐标列,然后从snpMap 中提取“新”基因组坐标,并将它们放入@987654324 中相应行的新列中@。我知道这就像使用查找表,这是我以前做过的事情,但就像我说的,我有点生疏了。

因为基因组坐标被分解成单独的列,例如染色体和坐标,我将它们连接在两个表中以使过程更容易一些:

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

旧坐标是CHRPOS(我已将它们连接成hg19_coords),新坐标是chr_hg38pos_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

我想将chrbasepair 列替换为相应的hg38 值,使用hg19_coords 作为“键”。最终,我也想替换 snp 中的值,但这是另一回事。

我应该如何处理这个问题?这就是data.table 的全部内容。

【问题讨论】:

    标签: r


    【解决方案1】:

    可能是一个不优雅的解决方案,但它是:

    bimjoin <- bim %>%
        left_join(snpMap, by = "hg19_coords") %>%
        subset(., select = c("chr_hg38", "snp", "position", "pos_hg38", "allele1", "allele2"))
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多