Tidyverse:根据部分匹配替换整个字符串

2024-01-25

我希望使用中的函数根据部分匹配替换数据中的整个字符串条目stringr包裹。

我尝试过的唯一方法是使用替换精确匹配str_replace_all()但当有数十种变化需要纠正时,这就变得乏味且难以处理。我正在寻找基于部分匹配的替换。在下面的代表中,我通过直接指定替换了“西班牙人”和“哥伦比亚人”的变体。但是,我很乐意根据单词中存在“Spa”或“Col”的条件来执行这些替换。

library(tidyverse)
library(stringr)

data <- c(
  "Spanish",
  "SPANIARD",
  "Spainiard",
  "Colombian",
  "Columbian",
  "Ecuador",
  "Equador",
  "Ecuadorian",
  "VENEZUELAN"
)

str_replace_all(data,
                c(
                  "Spanish" = "Spaniard",
                  "SPANIARD" = "Spaniard",
                  "Spainiard" = "Spaniard",
                  "Columbian" = "Colombian"
                ))
#> [1] "Spaniard"   "Spaniard"   "Spaniard"   "Colombian"  "Colombian" 
#> [6] "Ecuador"    "Equador"    "Ecuadorian" "VENEZUELAN"

Created on 2019-05-21 by the reprex package https://reprex.tidyverse.org (v0.2.1)

So str_replace_all()正如所宣传的那样,但我正在寻找一种方法来简化 tidyverse 中的此过程。任何帮助深表感谢。


我更喜欢使用距离测量(例如 Jaro-winkler 距离或其他距离测量),但它们确实有其缺点。对部分匹配可能带来的改变感到厌倦。如果您正在进行部分匹配,那么明智的做法是看看有哪些可能性。但是,您可以使用 tidyverse 中概述的操作case_when with startsWith or grepl:

tibble(data = data) %>%
  mutate(
    v1 = tolower(data),
    new_name = case_when(
      startsWith(v1, "spa") ~ "Spanaird",
      startsWith(v1, "col") ~ "Colombian",
      startsWith(v1, "eq") | startsWith(v1, "ec") ~ "Equadorian",
      startsWith(v1, "ven") ~ "Venezuelan",
      TRUE ~ as.character(data)))

# A tibble: 9 x 3
  data       v1         new_name  
  <chr>      <chr>      <chr>     
1 Spanish    spanish    Spanaird  
2 SPANIARD   spaniard   Spanaird  
3 Spainiard  spainiard  Spanaird  
4 Colombian  colombian  Colombian 
5 Columbian  columbian  Colombian 
6 Ecuador    ecuador    Equadorian
7 Equador    equador    Equadorian
8 Ecuadorian ecuadorian Equadorian
9 VENEZUELAN venezuelan Venezuelan

要查看可能性,您可以执行此操作(或其他一些操作):

tibble(data = data) %>%
  arrange(data) %>%
  count(tolower(data)) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tidyverse:根据部分匹配替换整个字符串 的相关文章

随机推荐

  • WPF 交互触发器在样式中调用视图模型上的命令[重复]

    这个问题在这里已经有答案了 可能的重复 如何在样式设置器中添加混合行为 https stackoverflow com questions 1647815 how to add a blend behavior in a style set
  • 您可以使用类 C 语言对 FPGA 进行编程吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在大学里 我用类似 C 的语言编写了 FPGA 不过 我也知道人们通常使用 Verilog 或 VHD
  • 静态类必须从对象派生 (C#)

    我在 C 中遇到问题 输出状态为 Error 1 Static class WindowsFormsApplication1 Hello2 cannot derive from type System Windows Forms Form
  • Celery AttributeError:异步错误

    我在 Mac OS X 10 13 4 上本地运行 RabbitMQ 和 Celery 当我运行 add delay x y 时 以下代码在本地运行 usr bin env python from celery import Celery
  • SSH 和 -bash:fork:无法分配内存 VPS Ubuntu

    我在 Ubuntu 12 04 VPS Nginx Unicorn 上托管我的 Rails 应用程序 部署后一切正常 但几个小时后 当我 ssh 到 VPS 时 我收到此消息 bash fork Cannot allocate memory
  • 如何为谷歌地图设置自定义标记标题

    如何设置包含信息和按钮的样式自定义标记标题 片段 我已经有一个自定义标记图标图像集 现在我需要一个自定义弹出窗口 当用户点击标记时 该窗口将包含某些信息和一个按钮 这与我想要实现的目标很接近 自定义标题 片段示例 LatLng huduma
  • std::array 是可移动的吗?

    std array 是可移动的吗 In Bjarne Native 2012 演示幻灯片 http ecn channel9 msdn com events GoingNative12 GN12Cpp11Style pdf 幻灯片 41 列
  • 如何使用 firebug 检查 CSS 伪类?

    我正在与一种不情愿的挣扎a hover我无法覆盖的 css 样式 我尝试检查 Firebug 中的元素 但我不明白为什么它不起作用 我什至不知道如何正确检查a hoverFirebug 中的 CSS 事件 我见过 Firebug 中的悬停检
  • 错误:根:未找到哈希 md5 代码

    我在一台没有 root 访问权限的 Linux 机器上 我构建了自己的 openssl 和 python 本地副本 2 7 13 当我尝试在 python 中导入 hashlib 时 收到以下错误消息 gt python Python 2
  • 鼠标点击时 Div 隐藏/显示的问题

    我尝试了你的脚本 但它不能正常工作 我编辑了下面的代码以准确显示我正在使用的内容 非常感谢您的帮助 Quazi Hi 我对 JQuery 很陌生 我正在尝试获取一个 divfade in在点击事件之后然后hide单击任意位置后 我设置了三个
  • 什么是列存储索引以及与聚集索引和非聚集索引有何不同?

    我对列存储索引感到困惑 什么是列存储索引 它与聚集索引和非聚集索引有何不同 假设您有如下表col1作为主键 col1 PK col2 col3 1 2 3 4 5 6 普通索引将 按行 每行 存储 因此单个给定行的所有列都驻留在单个页面上
  • 如何在 IntelliJ Rider 中生成 API 控制器?

    在 Visual Studio 中 我可以通过选择 添加 在 Web API 项目中生成 API 控制器 控制器 从这个菜单中 我可以选择模型类 上下文类和控制器名称 并且按下按钮我可以生成数百行样板文件 我已转移到 IntelliJ Ri
  • GLSurfaceView.queueEvent不在GL线程中执行

    我正在尝试从我的主要活动中为我的 GLSurfaceView 执行一些 OpenGL 命令 由于 OpenGL 渲染器在它自己的线程中工作 我必须使用queueEvent 据我所理解 我正在打电话queueEvent在我的 GLSurfac
  • 计算 Spark 数据框中的单词数

    在不使用 SQL 的 REPLACE 函数的情况下 如何找到 Spark 数据帧的列中的单词数 下面是我正在使用的代码和输入 但 Replace 函数不起作用 from pyspark sql import SparkSession my
  • JQuery Flippy 插件未在点击事件上触发

    我有一个小问题flippy带有 jQ uery Flippy 插件的插件标签http blog guilhemmarty com flippy http blog guilhemmarty com flippy 我有一个 divp tag
  • 在内部类中执行main方法[重复]

    这个问题在这里已经有答案了 如果 main 方法存在于静态内部类中 如何执行它 Main 方法存在于静态内部类中 我们需要执行该 main 方法 class A static class B public static void main
  • 我怎样才能让一个html视频播放一次,直到页面重新加载

    超级黑客 所以我尝试并搜索了几个小时 但似乎无法找到解决方案 在我的页面上 当用户滚动到页面的某个点时 我将其设置为自动播放视频的位置 它效果很好 但我发现视频一遍又一遍地循环很烦人 我只希望视频只播放一次 直到用户重新加载页面或访问新页面
  • IvyBridge 上指针追逐循环中附近的依赖存储对性能产生奇怪的影响。添加额外的负载会加快速度吗?

    首先 我在 IvyBridge 上进行了以下设置 我将在注释位置插入测量有效负载代码 前 8 个字节buf存储地址buf本身 我用它来创建循环携带的依赖项 section bss align 64 buf resb 64 section t
  • 程序集:用于自定义操作系统键盘支持的引导加载程序

    我有一个工作简单的自定义操作系统 目前没有做太多事情 D 现在我正在使用一个没有键盘支持的汇编文件 boot s 汇编文件 boot s set magic number to 0x1BADB002 to identified by boo
  • Tidyverse:根据部分匹配替换整个字符串

    我希望使用中的函数根据部分匹配替换数据中的整个字符串条目stringr包裹 我尝试过的唯一方法是使用替换精确匹配str replace all 但当有数十种变化需要纠正时 这就变得乏味且难以处理 我正在寻找基于部分匹配的替换 在下面的代表中