【发布时间】:2019-06-28 14:17:16
【问题描述】:
我有两个数据框,其中一个有两个标识符的大列表:
rsid uniq_id
rs796086906 1_13868_G_A
rs546169444 1_14464_T_A
rs6682375 1_14907_G_A
rs6682385 1_14930_G_A
其中一个包含两个标识符之一:
V1 V2 V3 V4 V5 V6
1 1_10439_A_AC 0 10439 A AC
1 1_13417_CGAGA_C 0 13417 C CGAGA
1 1_14907_G_A 0 14907 G A
我想要的是用第一个数据帧中相应的第二个 ID 替换第二个数据帧中的 ID(我也想不出一个简洁的方式来表达这个问题的标题,因此为什么它的措辞如此尴尬以及为什么我可能无法找到重复项)。即:
V1 V2 V3 V4 V5 V6
1 1_10439_A_AC 0 10439 A AC
1 1_13417_CGAGA_C 0 13417 C CGAGA
1 rs6682375 0 14907 G A
我目前的解决方案是使用for ... if循环如下:
for (x in 1:nrow(df2)){
if (df2$V2[x] %in% df1$uniq_id){
df2$V2[x] = df1$rsid[x]
}
}
但是,由于这两个文件都非常大,我认为这可能是一种非常低效的方法,我想知道是否有更快的方法。
有人建议使用 match() 函数可能会更快,但鉴于 R 文档表明 %in% 实际上更直观,而且我对它缺乏经验,我不确定如何在不同的方式。
任何帮助表示赞赏。
【问题讨论】: