匹配模式2数据帧r

时间:2014-12-22 20:15:44

标签: r pattern-matching

我有两个数据框,其中包含略有不同的字符串,例如:

Name              Size
Company.1 Inc.    234
Company.2 LLC     164
Company.3 INC     231

另一方面,我的第二个数据框是:

Name              State
Company.1 INC     MA
Company.2         NY
Company.3 inc.    CA

你知道一个工具可以匹配前6个字符,并将结果合并到一个新表中(或者如果有多个匹配则至少显示选项)?

我尝试了grep或sapply,但它无效,因为我需要将第一个数据帧的所有名称值与第二个数据帧的所有名称值进行比较。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

似乎您只需要使用match来匹配两个文件中的前9个字母,例如(我在这里假设df1是您的第一个数据集并且df2分别是第二个)

indx <- match(substr(df1$Name, 1, 9), substr(df2$Name, 1, 9))
df1["State"] <- df2$State[indx]
df1
#             Name Size State
# 1 Company.1 Inc.  234    MA
# 2  Company.2 LLC  164    NY
# 3  Company.3 INC  231    CA

或使用data.table

进行快速连接
library(data.table)
setkey(setDT(df1)[, Name := substr(Name, 1, 9)], Name)
setDT(df2)[, Name := substr(Name, 1, 9)]
df1[df2]
#         Name Size State
# 1: Company.1  234    MA
# 2: Company.2  164    NY
# 3: Company.3  231    CA