R部分字符串匹配和返回值(在R中)

2024-01-24

我有多个采购数据库,我需要在其中运行我构建的“关键字”列表来识别某些产品,如果有匹配,我想将产品标记到手术类别。

这是一个例子。

采购数据库(实际上我有超过2,000,000行要查看):

d<-data.frame(prod_desc=c("BANDELETTE TVTO-OBTRYX HALO", "BANDELETTE MINI ARC PRECISES", "BANDELETTE D'ANALYSE POUR GLYCEMIE", "DIACH. BANDELETTE STER 19MM X 72MM","SLING MALE SYSTEM","DIACHILON","AIGUILLE","GANT","LABEL","CRAYON"),label=1:10)

关键字和返回值列表(实际列表更长):

kw<-data.frame(kw=c("bandelette","tvt","bande transvaginale","sling system","argus"),category="ss_bandelette")

我想寻找产品prod_desc包含我的关键字字符串kw如果有匹配项,我想在其中添加一列d将返回的数据框category与相关的kw in the kw数据框。

现在我能够使用以下代码实现所需的结果:

d$match <- ifelse(d$cat <- grepl(paste(kw$kw,collapse="|"), d$name,ignore.case = TRUE) == "TRUE","SS_Bandelette","-")

但这段代码并不是很高效,因为我有大约 350 个关键字,它们映射到大约 30 个不同的类别。我可以使用什么代码来自动返回类别ddataframe 如果我的关键字之一被触发?

非常感谢您的帮助。

Phil


# made all to lowercase
d$prod_desc <- tolower(d$prod_desc)
# create a logical matrix that specifies which keywords are present on each row of 'd'
m = data.frame(sapply(kw$kw, grepl, d$prod_desc))
colnames(m) = kw$kw

# create a column in 'd' with the corresponding keyword      
d$kw <- apply(m, 1, function(x) names(x)[which(x)[1]])
# simple merge
merge(d, kw, by = "kw", all.x = T)

#           kw                          prod_desc label      category
#1  bandelette bandelette d'analyse pour glycemie     3 ss_bandelette
#2  bandelette diach. bandelette ster 19mm x 72mm     4 ss_bandelette
#3  bandelette        bandelette tvto-obtryx halo     1 ss_bandelette
#4  bandelette       bandelette mini arc precises     2 ss_bandelette
#5        <NA>                  sling male system     5          <NA>
#6        <NA>                          diachilon     6          <NA>
#7        <NA>                           aiguille     7          <NA>
#8        <NA>                               gant     8          <NA>
#9        <NA>                              label     9          <NA>
#10       <NA>                             crayon    10          <NA>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R部分字符串匹配和返回值(在R中) 的相关文章

随机推荐

  • 捕获音频会话事件

    我尝试编写一些应用程序来监视音频会话 如 SndVol 所做的那样 我激活了 IAudioSessionManager2 通过 IAudioSessionEnumerator 获取当前音频会话列表 使用音频会话管理器中的 RegisterS
  • 比较不同编码的字符串

    我只需要与 JavaScript 中的字符串进行比较 但有时特定字符串的比较会失败 通过 jQuery 获得一个值text 方法 来自一些自动生成的 HTML var value1 somelement text 另一个值被硬编码在 Jav
  • css/javascript 表单 onfocus 占位符文本仍然存在,输入时消失

    我只是想弄清楚如何制作像 www tumblr com 这样的表单 onFocus 占位符保留在输入框中 但当开始键入时 占位符文本消失 我通过找到的另一个教程知道如何进行 onFocushere http www webstuffshar
  • 我的 Android 应用程序在按主页按钮后崩溃

    我有一个具有滚动视图和媒体播放器的活动 当音乐正在播放并且我按主页时 它正常关闭 但是当我在没有音乐或其他任何内容的情况下按下主页按钮时 应用程序停止运行 请帮忙 有一个代码或有什么方法可以避免这个问题呢 我是安卓新手 这是我的日志猫 01
  • 朱莉娅:变量未定义

    变量作用域的行为看起来很奇怪 代码块 tp 1 function test2 println tp end 工作得很好 同时 function test if tp 0 tp tp 1 end end 给出异常 tp 未定义 怎么了 由于变
  • 带有 ACR122U 的 libnfc 对 SELECT(通过 AID)APDU 没有响应

    See NFC 读取器 SELECT 通过 AID APDU 未路由到 Android 设备 https stackoverflow com q 50316799 2425802关于调试和最终结果 TL DR 读者可能已经不复存在了 我有
  • 如何使用第三方库来包含在 Firefox 插件/扩展中?

    我目前正在学习如何使用 XPCOM 创建 Firefox 插件 并且我想知道如何包含第三方库来开发它们 我遵循了一些教程从 C 文件编译 xpt 和 dll 在 https developer mozilla org en How to b
  • 删除并重新创建发布配置文件 VS 2017 后旧的 Azure 函数返回

    我注意到 如果使用 Azure 门户删除 Azure 函数 例如 My Function App 并使用 Visual Studio 2017 在同一资源组中创建具有相同名称 My Function App 的新应用程序 则所有旧函数都会返
  • 每次在 Linux 机器上创建新套接字时如何运行代码?

    每次在 Linux 服务器上创建新的 TCP 套接字时 我都需要调用一个函数 架构代码是 do new socket block until new socket created do something new socket while
  • BigQuery - 检查表是否已存在

    我在 BigQuery 中有一个数据集 该数据集包含多个表 我使用 BigQuery API 以编程方式执行以下步骤 查询数据集中的表 由于我的响应太大 我启用了allowLargeResults参数并将我的响应转移到目标表 然后 我将数据
  • Windows批处理文件删除.svn文件和文件夹

    为了删除 myfolder 中的所有 svn 文件 文件夹 子文件夹 我在批处理文件中使用这个简单的行 FOR R myfolder X IN svn DO RD S Q X 这有效 但如果没有 svn 文件 文件夹 批处理文件会显示一条警
  • Angular JS 在 POST 请求中验证 CSRF 令牌

    我正在使用 AngularJS 和 Rails 我有以下批量更新用户的请求 http method POST url scope update url params selected ids userIds 由于 URL 长度的限制 这不能
  • TextView 样式 ArrayIndexOutOfBoundsException

    我的管理控制台中的 PlayStore 经常发生崩溃 我不明白为什么它会崩溃 我从未重现过此崩溃 它似乎仅来自三星 Galaxy 设备 但不太确定 从 SDK 版本 4 1 4 2 4 3 开始 这是完整的 StackTrace andro
  • 使用 f 字符串固定小数点后的数字

    有没有一种简单的方法可以使用Python f 字符串来固定小数点后的位数 特别是 f 字符串 而不是其他字符串格式选项 如 format 或 例如 假设我想显示小数点后 2 位数字 我怎么做 这么说吧 a 10 1234 在格式表达式中包含
  • 嵌套 ItemsControl 存在严重性能问题

    我使用嵌套的 ItemsControl 来显示分层数据 问题是 即使数据很少 速度也非常慢 它还会完全阻塞 UI 线程 直到加载数据 我在这里做错了什么 生成演示数据并将其绑定到 ItemsControl 的代码 private void
  • 在 CakePHP 3 中哪里放置自定义 PHP 类?

    我有一个新的 PHP 类 我想从控制器调用它 在 CakePHP 文件夹结构中 我应该将这个新类放在哪里 从控制器调用或使用它的过程是什么 预先感谢您的合作 从我的角度来看 您可以重用任何自己的类以及任何第三方类作为utility班级 如果
  • 如何处理一个读取三角形三边并在输入有效的情况下计算面积的家庭作业程序?

    这是我的任务 创建一个名为 MyTriangle 的类 其中包含以下两个方法 Return true if the sum of any two sides is greater than the third side public sta
  • VBA用公式填充多张纸上的单元格

    我正在尝试为工作簿的每张工作表中的每个单元格设置公式 我需要将 2 个公式分布在 2 个不同的单元格范围内 我在 Variant 中定义了 strFormula 1 和 2 对于公式1 我希望分配到A到AJ列下的单元格 对于公式 2 我希望
  • 改变时间轴刻度标签的字体大小

    我正在根据常规时间轴绘制时间序列数据 目前 我使用默认的 多刻度 刻度格式 因此我在 X 轴上看到日期与 AM PM 小时的组合 现在 如何以更大的字体显示日期 使它们从小时刻度中脱颖而出 所有刻度似乎都有相同的 刻度 CSS 类 所以我无
  • R部分字符串匹配和返回值(在R中)

    我有多个采购数据库 我需要在其中运行我构建的 关键字 列表来识别某些产品 如果有匹配 我想将产品标记到手术类别 这是一个例子 采购数据库 实际上我有超过2 000 000行要查看 d lt data frame prod desc c BA