在R中的数据框之间匹配和替换

时间:2019-09-28 00:13:47

标签: r dplyr

我有两个数据帧eval(script)Full Table,第一个有Dataset Key_IdentifierAccesion列,而另一个只有我感兴趣的数据, SequenceAccesion列。

我所拥有的

Sequence中:

Full Table

Key_Identifier Accesion Sequence ARG1 AA001 AAACTGGG ARG2 AA002 AAACTGGC ARS2 AA003 AAACTGGG ART1 AA004 AAACTGGA ARG3 AA005 AAACTGCG ART4 AA006 AAACTGGG 中的

Dataset

我想要的

我要匹配{{1}中Accesion Sequence AA001 ACTGGG AA003 ACTGGG AA005 ACTGCG AA006 ACTGGG 中的Accesion,并将其名称替换为Dataset中的Full Table,保持Key_Identifer在{{ 1}}。喜欢:

Full Table

这是最好的方法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用merge合并两个数据帧。由于列名不同,因此by.x = 'key_identifier', by.y = 'accesion'可以处理。

a <- data.frame('key_identifier' = c('AAA001', 'AAA003', 'AAA005'),  'accesion'= c('ARG1', 'ARG2', 'ARS2'), 'sequence' = c('AAACTGGG', 'AAACTGGC', 'AAACTGGG'))
b <- data.frame('accesion' = c('AAA001', 'AAA003', 'AAA005'), 'sequence' = c('ACTGGG', 'ACTGGG', 'ACTGCG'))
c <- merge(a, b, by.x = 'key_identifier', by.y = 'accesion')

 key_identifier accesion sequence.x sequence.y
1         AAA001     ARG1   AAACTGGG     ACTGGG
2         AAA003     ARG2   AAACTGGC     ACTGGG
3         AAA005     ARS2   AAACTGGG     ACTGCG

选择必要的列,

f <- c[,c(2,4)]
colnames(f) <- c('Accesion', 'Sequence')

Accesion Sequence
1     ARG1   ACTGGG
2     ARG2   ACTGGG
3     ARS2   ACTGCG

答案 1 :(得分:0)

dplyr / tidyverse对此非常有效,因为它对于新R用户来说非常直观。您可以使用select(-col_to_delete)除去不需要的列,然后inner_join除去仅存在匹配项的行。从那里开始,有一个简单的案例,即删除多余的列并根据需要重命名:

Full_Table %>% 
  select(-Sequence) %>% 
  inner_join(
    Dataset,
    by = "Accesion"
  ) %>% 
  select(-Accesion) %>% 
  rename(
    Accesion = Key_Identifier
  )

对于您的简单示例,我想以R为底的merge就足够了,但是如果您要进行更复杂的转换,一定要研究dplyr。