【问题标题】:High-level data matching between 2 tables2个表之间的高级数据匹配
【发布时间】:2013-07-01 15:05:19
【问题描述】:

我是 R 新手,我需要有关处理此问题的建议:

我有 2 张桌子。表的开头如下所示:

表一:

   SNP              Gene      Pval  Best_SNP    Best_Pval
rs2932538   ENSG00000007341 5.6007
rs10488631  ENSG00000064419 7.7461
rs12537284  ENSG00000064419 4.5544
rs3764650   ENSG00000064666 12.3401
rs10479002  ENSG00000072682 5.0141
rs6704644   ENSG00000072682 6.2306
rs2900211   ENSG00000072682 9.9022

表 2:

Best_SNP          Gene      Best_Pval   
rs9028922   ENSG00000007341 10.7892
rs8233293   ENSG00000064666 89.342
rs3234432   ENSG00000072682 32.321
rs2892334   ENSG00000064419 43.235

表 1 包含每个基因的完整 SNP 列表。表 2 包含表 1 中出现的每个基因的最佳 SNP 和相应的最佳 Pval。

我想要执行以下操作:将表 1 中的每个基因匹配到表 2,然后复制表 2 中的 Best_SNP 和 Best_Pval 并将它们粘贴到表 1 中该基因的 Best_SNP 和 Best_Pval 列下。 棘手部分是在表 1 中,每个基因随机重复不同的行数。例如,第二个基因ENSG00000064419重复2行,ENSG00000072682重复3行。所以代码需要过滤基因的名称,只复制相同基因的Best_SNP和Best_Pval一次

因此对于基因 ENSG00000072682,在 3 行中,只有似乎包含该基因的第一行需要填写 Best_SNP 和 Best_Pval 列。我不希望其余 2 行重复填充了 Best_SNP 和 Best_Pval 列。这样可以更容易地查看每个基因的开始和结束位置。

【问题讨论】:

  • 这就是 Excel 中的 vlookup 函数。你可以看到 here 在 R 中这样做。

标签: r compare bioinformatics genetics


【解决方案1】:

如果我正确理解了这个问题,这就是解决方案:

x <- structure(list(SNP = c("rs2932538",  "rs10488631",  "rs12537284", "rs3764650",  
"rs10479002",  "rs6704644",  "rs2900211"), Gene = c("ENSG00000007341", "ENSG00000064419", 
"ENSG00000064419", "ENSG00000064666", "ENSG00000072682", "ENSG00000072682","ENSG00000072682"),
Pval= c(5.6007, 7.7461, 4.5544, 12.3401, 5.0141, 6.2306, 9.9022)), row.names= c(NA, 7L), class = "data.frame")

x
         SNP            Gene    Pval
1  rs2932538 ENSG00000007341  5.6007
2 rs10488631 ENSG00000064419  7.7461
3 rs12537284 ENSG00000064419  4.5544
4  rs3764650 ENSG00000064666 12.3401
5 rs10479002 ENSG00000072682  5.0141
6  rs6704644 ENSG00000072682  6.2306
7  rs2900211 ENSG00000072682  9.9022

x1 <- x[!(duplicated(x$Gene) | duplicated(x$Gene, fromLast = FALSE)), ]

x1
         SNP            Gene    Pval
1  rs2932538 ENSG00000007341  5.6007
2 rs10488631 ENSG00000064419  7.7461
4  rs3764650 ENSG00000064666 12.3401
5 rs10479002 ENSG00000072682  5.0141

y <- structure(list(Best_SNP = c("rs9028922", "rs8233293", "rs3234432", "rs2892334"), Gene =  c("ENSG00000007341", "ENSG00000064666",  
"ENSG00000072682",  "ENSG00000064419" ),
Best_Pval= c(10.7892, 89.342, 32.321, 43.235)), row.names= c(NA, 4L), class = "data.frame")

y
   Best_SNP            Gene Best_Pval
1 rs9028922 ENSG00000007341   10.7892
2 rs8233293 ENSG00000064666   89.3420
3 rs3234432 ENSG00000072682   32.3210
4 rs2892334 ENSG00000064419   43.2350


merge(x1, y, by="Gene", all= FALSE)

             Gene        SNP    Pval  Best_SNP Best_Pval
1 ENSG00000007341  rs2932538  5.6007 rs9028922   10.7892
2 ENSG00000064419 rs10488631  7.7461 rs2892334   43.2350
3 ENSG00000064666  rs3764650 12.3401 rs8233293   89.3420
4 ENSG00000072682 rs10479002  5.0141 rs3234432   32.3210

【讨论】:

  • 嗨,谢谢。此代码似乎删除了重复相同基因的行。但是有没有办法可以保留表 1 中的所有行?如果一个基因被重复,那么我只想为第一行中的 first 基因复制 Best_SNP 和 Best_Pval(在基因逐行重复的所有行中)。跨度>
猜你喜欢
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多