我有两个数据框,其中包含略有不同的字符串,例如:
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,但它无效,因为我需要将第一个数据帧的所有名称值与第二个数据帧的所有名称值进行比较。
感谢您的帮助!
答案 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