首页 > 解决方案 > 使用 R 匹配数据框中的复杂字符串名称

问题描述

我有两个数据框:

name1 name2
AaI08 BbZ09
AaB65 BbX02

第二个带有代码(省略最初的 Aa 或 Bb),其中包含描述:

Code meaning
I08  Volvo
B65  Seat
Z093 BMW
X021 Fiat

我想匹配第二个数据帧的字母后的前两个数字并将其带到第一个数据帧。最终结果应如下所示:

name1 name2
Volvo BMW
Seat  Fiat

我的直觉是使用该函数greplstr_extract(code, '[A-Z]\\d{2}')分别匹配和收集字母后的前两个数字。

标签: rdataframereplacestring-matchinggrepl

解决方案


从字符串中删除前两个字符,然后执行连接。

library(dplyr)
df1 %>%
  mutate(Code = sub('..', '', name1)) %>%
  #If you want to remove initial Aa or Bb
  #mutate(Code = sub('^(Aa|Bb)', '', name1)) %>%
  inner_join(df2, by = 'Code')

#  Code name1 name2 meaning
#1  B65 AaB65 BbX02    Seat
#2  I08 AaI08 BbZ09   Volvo

在基础 R 中:

merge(transform(df1, Code = sub('..', '', name1)), df2, by = 'Code')

推荐阅读