我有一个基因表达数据集"rna"带探针id。我也有一个参考数据集" refquot;具有探针ID及其对应的entrez ID。我想映射探针id从&;rna&;给那些在"ref"这样我就可以添加entrez ID到"rna"在我的参考数据集中,有探针映射到多个entrez ID,因此我还需要复制"rna"中的那些行。以便每行只映射到一个entrez ID(但保持相同的信息)。我正在寻找的结果是"有机"。也有一些重复的主菜id可以留下。TYIA
rna = data.frame("Org1" = c(1.5, 3.5, 2.4, 3.2, 4.5), "Org2" = c(2.5, 3.5,7, 2.6, 7),
"Org3" = c(3.6,7.2,4,5,6), "Probe" = c("11715100_at", "11715101_s_at",
"11715102_x_at", "11715103_x_at", "11715104_s_at"))
ref = data.frame("Probe Set ID" = c("11715100_at", "11715101_s_at", "11715102_x_at", "11715103_x_at",
"11715104_s_at"), "Entrez" = c("8355", "8355", "340307 /// 441294",
"285501", "8263 /// 474383 /// 474384"))
org_rna = data.frame( "Org1" = c(1.5, 3.5, 2.4, 2.4, 3.2, 4.5, 4.5, 4.5), "Org2" = c(2.5, 3.5,7,7, 2.6, 7,7,7),
"Org3" = c(3.6,7.2,7.2,4,5,6,6,6), "Probe" = c("11715100_at", "11715101_s_at",
"11715102_x_at", "11715102_x_at", "11715103_x_at", "11715104_s_at",
"11715104_s_at", "11715104_s_at"), "Entrez" = c("8355", "8355",
"340307", "441294", "285501", "8263", "474383", "474384"))
第一步
将ref
转换为数据帧,其中每个Entrez-id都有自己的行:
ref_match <- ref
ref_match$Entrez <- strsplit(ref_match$Entrez, ' /// ')
ref_match <- tidyr::unnest(ref_match, Entrez)
参见R - make multiple elements list to data frame rows获取替代方法。
步骤2连接rna
和ref_match
,其中rna$Probe == ref_match$Probe.Set.ID
:
rna_matched <- dplyr::left_join(rna, ref_match, by=c('Probe' = 'Probe.Set.ID'))
清理
rm(ref_match)
你会注意到这些例子需要tidyr
和dplyr
库,它们都是tidyverse
包的一部分;您可能需要先安装它们。rna_matched
的结果与您的示例相同。