R通过部分匹配合并2个表/数据框

时间:2018-06-25 01:17:31

标签: r merge

我有两个表/数据框。
第一个表(ID)如下所示:

enter image description here

第二个表(名称)如下:

enter image description here

我想将“ IDTag”变量与“ Name”变量的前几个字母匹配。在其他编程语言中,我将进行一次foreach并遍历第二个表的每一行的每个IDTag(将IDTag与“名称”变量的前n个字符进行匹配,其中n是IDTag的字符数有问题。

在R中,似乎应该有一种方法可以做到这一点,我研究了pmatch和其他一些方法,但是这些方法似乎根本无法实现匹配,或者当我尝试使用它们时提出了几种方法在我意想不到的地方创建了NA(使用上面的表数据的示例代码:

main

我觉得我会用错误的理论或概念来解决这个问题,所以我想看看是否有人可以指导最简单/最清晰的方法来准确地做到这一点。

编辑原始问题以回复评论...

预期的输出将类似于以下内容(即-名称表的所有列以及ID表中的Group列。期望多个匹配项-ID和名称表之间存在一对多关系): enter image description here

谢谢

1 个答案:

答案 0 :(得分:0)

如果您愿意使用sqldf包,那么一个选择就是使用您提供给我们的逻辑来编写联接:

library(sqldf)
sql <- "SELECT * FROM ID t1 INNER JOIN Names t2
        ON t2.Name LIKE t1.IDTag || '%'"

output <- sqldf(sql)

注意:如果要保留ID数据框中的所有行,而不管它们是否与Names中的任何内容匹配,请改用左联接。