У меня есть два фрейма данных, один из которых имеет большой список из двух идентификаторов:
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
То, что я хочу, это заменить идентификатор во втором кадре данных соответствующим вторым идентификатором из первого кадра данных (я также не мог придумать краткий способ сформулировать это для заголовка этого вопроса, поэтому, почему он так неловко сформулирован) и почему я не смог найти дубликаты). I.e.:
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%
на самом деле более интуитивно понятен, и моя неопытность в этом, я не уверен, как применить его в по-другому.
Любая помощь приветствуется.