R:基于子串匹配合并数据帧

时间:2017-10-06 13:42:29

标签: r regex dataframe merge substring

我有两个数据框,我想通过蛋白质加入名称合并。

df1是一个包含与基因相关的蛋白质登录名称的数据框(这些名称中有几个)。因此,df1包含这些名称的“列表”,这些名称由字符串格式的分号分隔,并且在df1中不会再出现唯一值。我在下面写了这些名字“A1,B1,......”:

df1:

Name                a.value
A1;B1;C1            ...
A2                  ...
A3;B3               ...
A4;B4;C4;D4;E4;F4   ...

df2是一个数据框,其中只包含每行命名的一个:

df2:

Name  b.value
A2    ...
B3    ...
B4    ...

df1和df2都包含其他列。

我希望合并合并的数据框,以便在df2中的加入名称作为名称df1之一存在时匹配行,如下所示:

A2   A2                 a.value  b.value
B3   A3;B3              ...      ...
B4   A4;B4;C4;D4;E4;F4  ...      ...

当然,还包括来自两个数据帧的其他列。

非常感谢任何建议,如果您需要我详细说明,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分:1)

这提供了请求的输出:

l <- strsplit(as.character(df1$Name), ';')
df1new <- data.frame(Name = unlist(l), Name.string = rep(df1$Name, lengths(l)))
merge(df2, df1new, by = 'Name', all.x = TRUE)

结果:

   Name       Name.string
1:   A2                A2
2:   B3             A3;B3
3:   B4 A4;B4;C4;D4;E4;F4