r - 使用 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
我的直觉是使用该函数grepl
并str_extract(code, '[A-Z]\\d{2}')
分别匹配和收集字母后的前两个数字。
解决方案
从字符串中删除前两个字符,然后执行连接。
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')
推荐阅读
- javascript - 如何在另一个文件中获取 module.exports 描述的值 [Discord.js]
- c++ - 提取 Windows 10 通知历史记录
- reactjs - Jest 测试`expect().toThrowError()` 通过但仍将未捕获的错误记录到控制台
- css - CSS:无法为 WordPress 后网格居中分页
- swift - 如何快速获取let Int的地址
- c++ - 如何从标准输入读取多行直到 EOF?
- vue.js - Vue路由器:如何为动态路由动态生成页面标题?
- angular - Angular 9:从后端收到的带有日文字符的 csv 未正确下载
- sql-server - 如何根据先前的值在时间轴上按顺序添加另一列中的一组数字
- python - 用 Python 中的 BS4 替换整个代码块,将 HTML 的一部分替换为另一个块