如何在 case_when 语句中检测多个正则表达式

2024-04-08

我最近从 ifelse 转换为case_when from dplyr.

Aim

我希望能够使用以下命令从数据帧中的语句中检测多个正则表达式case_when如下:

Input

statement<-data.frame(statement = c("I have performed APC and RFA",
 "An EMR was done","I didn't do anything"),stringsAsFactors=FALSE)

所需输出

statement                            out

I have performed APC and RFA        APC,RFA
An EMR was done                     EMR
I didn't do anything                No Event

Attempt

library(dplyr)
library(stringr)

      dataframe <- 
        dataframe %>% 
        mutate(
          EVENT = case_when(
            str_detect(statement,"EMR") ~ "EMR", 
            str_detect(statement, "HALO|RFA") ~ "RFA", 
            str_detect(statement, "APC") ~ "APC", 
             TRUE ~ "No Event"
          )
        )

问题

如果存在多个字符串,则每个语句仅提供一个输出,而不是多个输出。有没有办法检测多个字符串?


1) gsubfn::带式 strapply可以一次完成提取和翻译。strapply将,对于每个组成部分stmt, 匹配模式pat到它,所有匹配都将使用 L 进行翻译,然后返回。这empty参数定义了组件返回的内容stat没有匹配项。这给出了一个匹配列表,每行一个列表组件,其中toString用于将每个转换为逗号分隔的字符串。这是此处提供的 3 个替代方案中最短的一个。

library(gsubfn)

L <- list(APC = "APC", EMR = "EMR", HALO = "RFA", RFA = "RFA")
pat <- paste(names(L), collapse = "|")
transform(statement, 
  out = sapply(strapply(stmt, pat, L, empty = "No Event"), toString),
  stringsAsFactors = FALSE)

giving:

                          stmt      out
1 I have performed APC and RFA APC, RFA
2              An EMR was done      EMR
3         I didn't do anything No Event

2) 基础R Using L and pat从上面创建一个函数,它接受单词的字符向量x并提取出匹配的单词pat into g. If g具有非零长度使用平移其元素L并使用将其压缩为单个字符串toString;否则,返回No Event.

现在拆分每个元素stmt转化为单词使用strsplit并申请process对于每个这样的字符向量。

process <- function(x) {
  g <- grep(pat, x, value = TRUE)
  if (length(g)) toString(L[g]) else "No Event"
}
transform(statement, out = sapply(strsplit(stmt, "\\s+"), process),
  stringsAsFactors = FALSE)

3) dplyr/tidyr Using L来自 (1) 按行号分组和stmt并将单词分成单独的行。过滤掉这些词names(L)并将所有行折叠为一行stmt小组翻译通过L并使用toString生成逗号分隔的字符串。放下n柱子。此时我们已经得到了想要的结果,除了No Event行仍然缺失,所以正确加入我们所拥有的statement并将 NA 替换为No Event.

library(dplyr)
library(tidyr)

statement %>%
  group_by(n = 1:n(), out = stmt) %>%
  separate_rows(out) %>%
  filter(out %in% names(L)) %>%
  summarize(stmt = stmt[1], out = toString(L[out])) %>%
  ungroup %>%
  select(-n) %>%
  right_join(statement, by = "stmt") %>%
  mutate(out = if_else(is.na(out), "No Event", out))

giving:

# A tibble: 3 x 2
  stmt                         out     
  <chr>                        <chr>   
1 I have performed APC and RFA APC, RFA
2 An EMR was done              EMR     
3 I didn't do anything         No Event

Note

我们用它作为输入:

statement <- structure(list(stmt = c("I have performed APC and RFA", 
  "An EMR was done", "I didn't do anything")), 
  class = "data.frame", row.names = c(NA, -3L))

Updates

重新阅读问题后修改了多次。还添加了更多替代方案。

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

如何在 case_when 语句中检测多个正则表达式 的相关文章

  • 建模前减少因子水平数量

    我有一个 2600 个级别的因子 我想在建模之前将其减少到 10 我想我可以通过这样的操作来做到这一点 如果一个因素列出的次数少于 x 次 则应将其放入名为 其他 的存储桶中 这是一些示例数据 df lt data frame colour
  • 分组和计数以获得接近值

    我想计算每country的次数status is open以及次数status is closed 然后计算closerate per country Data customer lt c 1 2 3 4 5 6 7 8 9 country
  • 抑制 R 中的错​​误消息

    我正在 R 中运行模拟研究 有时 我的模拟研究会产生错误消息 当我在函数中实现模拟研究时 当出现此错误消息时模拟停止 我知道抑制错误是不好的做法 但此时对我来说 除了抑制错误然后继续下一个模拟 直到达到我喜欢运行的模拟总数为止 没有其他选择
  • 在ggplotly散点图中添加自定义数据标签

    我想显示Species对于每个数据点 当光标位于该点上方而不是 x 和 y 值时 我用iris数据集 另外 我希望能够单击数据点以使标签持久存在 并且当我在图中选择新位置时标签不会消失 如果可能的话 最基本的是标签 持久性问题是一个优点 这
  • Shiny可以识别用鼠标选择的文本(突出显示的文本)吗?

    我需要用户将文本片段分配给 Shiny 中的类别或 代码 基本上 我希望用户突出显示输出中的文本 在下面的示例中 来自table or text输出 然后按一个按钮 code 并将选定的文本分配给应用程序内的对象 在下面的应用程序中 所选文
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • 将 read.csv 与符号链接文件一起使用

    我正在尝试做什么 我的源文件非常大 我想避免将其复制到其他文件夹中 我决定创建一个指向大文件的符号链接并想使用read csv读取文件 文件夹结构 项目1 数据 源文件 csv 项目2 数据 别名到源文件 csv 什么地方出了错 读取源文件
  • 在 R 中将时间间隔数据扩展为天数

    假设我有如下所示的数据 interval id indiv id role start date end date 1 1 A 2006 05 01 2006 06 16 2 1 B 2006 06 16 2006 10 16 3 1 A
  • 以编程方式触发 R 传单中的标记鼠标单击事件以获得闪亮效果

    我的问题与此相同 在 R 传单中触发标记鼠标单击事件以获得闪亮效果 https stackoverflow com questions 56962857 trigger marker mouse click event in r leafl
  • R:为什么 boxplot(x,log="y") 与 boxplot(log(x)) 不同?

    delme lt exp rnorm 1000 1 5 0 3 boxplot delme log y boxplot log10 delme 为什么这两个图中的胡须不同 谢谢 阿古斯 我想说的是 在您的第一个图中 您只是将 y 轴更改为对
  • R texreg:如何选择要显示的 gof 统计信息?

    我正在使用 texreg 通过 plm 生成面板回归的输出表 我想抑制所有 gof 统计数据的输出 这不是显示 R2 adj R2 和 N 我只想显示 adj R2 有谁知道一个简单的方法来做到这一点 好吧 这实际上很简单 只需在调用中包含
  • 使用 readHTMLTable 从 https 网页读取表格

    我安装了 R 3 3 1 并使用 RStudio 0 99 903 我正在尝试从以下 URL 将表格读入 R https www fantasypros com nfl rankings consensus cheatsheets php
  • 将日期时间字符串转换为 Date 类

    我有一个带有日期时间字符列的数据框 当我使用as Date 除了少数实例之外 我的大多数字符串都被正确解析 下面的示例有望向您展示发生了什么 my attempt to parse the string to Date uses the s
  • 使用自定义渐变填充直方图箱

    我想在 R 和 ggplot2 中创建一个直方图 其中根据连续的 x 值填充箱 大多数教程仅通过离散值或密度 计数进行着色 下列的这个例子 https stackoverflow com questions 40284227 how to
  • 在 R 中导入 csv 文件时如何保留前导零?

    当我写一个 csv来自 R 的文件 其中我的组名称以前导零值开头 前导零被保留 但是当我导入 csv前导零被删除 组名称被转换为整数 当我导入一个组时 如何保留组名称中的前导零 csvR 中的文件 Example df lt data fr
  • R:ifelse 中的字符串列表

    我正在寻找与 MySQL 中的 where var in 语句类似的东西 我的代码如下 data lt data frame id 10001 10030 cc1 rep c a b c 10 attach data data new lt
  • 如何读取 R 中的每个 .csv 文件并将其导出到单个大文件中

    你好 我有以下格式的数据 101 20130826T155649 3 1 round 0 10552 180 yellow 12002 1 round 1 19502 150 yellow 22452 1 round 2 28957 130
  • 在 Lavaan 生长曲线模型中提取个体轨迹

    我已经使用 R 的 Lavaan 包中的 Growth 函数成功地对一项研究的纵向数据进行了建模 我找不到任何关于如何提取每个参与者的预测轨迹的记录 我只能找到整个组的预测轨迹 在摘要输出的 拦截 部分下给出 使用 lavPredict m
  • 通过 r markdown 中的循环创建代码片段

    如同如何使用R中的knitr创建一个包含代码块和文本的循环 https stackoverflow com questions 36373630 how to create a loop that includes both a code
  • 按组计算连续行中的值之间的差异

    这是我的一个df 数据框 group value 1 10 1 20 1 25 2 5 2 10 2 15 我需要按组计算连续行中的值之间的差异 所以 我需要一个结果 group value diff 1 10 NA because the

随机推荐

  • 存储过程超时 - 但从 SSMS 运行时正常

    我有一个存储过程 错误提示 超时已过期 涉及的代码是ADO VB6 存储过程本身没有问题 您可以在查询窗口中运行它 并且需要不到一秒钟的时间 用于获取连接等的代码也是模块化的 并在大型应用程序中使用 在一个特定数据库上 仅在这一位置发生超时
  • 命名空间“Microsoft.AspNetCore.Razor”中不存在类型或命名空间名称“Hosting”

    我使用 Visual Studio 创建了一个项目 NET Core 2 1 SDK React 模板 我在运行项目时遇到以下错误 缺少一个或多个编译参考 确保您的项目引用 Microsoft NET Sdk Web 并且 Preserve
  • 模拟器中的 UIView 边界/绘图不正确

    我创建了一个单视图测试应用程序并添加了UIButton and UIView to the UIViewController在主故事板中 我已将按钮和视图的大小调整为相同的大小 在我的 VC 的 viewDidAppear animated
  • 通过下拉菜单链接到 HTML 中的其他页面

    我正在尝试通过下拉菜单链接到其他 html 页面 并且我尝试了各种代码 但似乎无法使其工作 我正在使用这段代码
  • Python:确定数字是否为平方、立方等的函数[重复]

    这个问题在这里已经有答案了 我的简单问题是创建一个函数来确定数字 N 是否可以写成a n对于某些给定的 n 即我需要检查是否N 1 n 是一个整数 不知何故 这个函数会产生错误的结果 def is power N n r float N 1
  • 如何将 Address 对象数组传递给另一个 Activity

    我正在尝试传递一系列Address http developer android com reference android location Address html通过 Intent 对象传递给另一个 Activity 的对象 由于 A
  • 值注释在 Junit 测试中不起作用

    SpringBootTest public class RuleControllerTest Value myUrl private String myUrl private HttpClient httpClient HttpClient
  • 在 C# 中处理非验证 SSL 证书的最佳方法是什么

    我使用以下代码来确保所有证书都通过 甚至是无效的证书 但我想知道是否有更好的方法 因为此事件被全局调用 而我只希望证书通过某个 HTTP 调用而不是对于任何其他异步发生的事情 This delegate makes sure that no
  • 保存 Excel 文档 Apache POI

    我需要从 Excel 文档创建信息 我使用 Java 和 Apache POI 这是我的代码 Get path with JFileChooser public static String LeeRuta JFileChooser choo
  • CATransform3D 旋转导致一半图像消失

    我使用以下代码来旋转图像 但已旋转到页面 之外 的图像的一半 沿 y 轴向下 消失了 怎么修 heading以弧度为单位 CALayer layer myUIImageView layer CATransform3D rotationAnd
  • 禁用“使用 use strict 的函数形式”,但保留“缺少 'use strict' 语句”警告

    我正在使用 jslint 来验证我的代码 我的所有页面上都有 use strict 如何禁用消息 使用 use strict 的函数形式 但保留 缺少 use strict 语句 警告 这样我就不会忘记将其放在新文件中 Thanks 根据克
  • free 不会删除分配给指针(int 数组)的内存,使用 free 两次可以工作,为什么?

    这是出于好奇 我试图找到我对之前问题的疑问的答案 但他们似乎没有答案 所以在这里询问 我刚刚编写了一段代码 试图将内存分配给 int 指针 以填充数组 并扫描 int 值 一旦我完成了数组 我想删除分配给指针的数据 内存 尽管我的代码工作正
  • 错误:pandas 哈希表 keyerror

    我已经使用 pandas 成功读取了 csv 文件 当我尝试从数据框中打印特定列时 我收到关键错误 特此 我分享带有错误的代码 import pandas as pd reviews new pd read csv D aviva csv
  • 离子科尔多瓦飞溅屏幕/图标

    我正在使用适用于 iOS 和 Android 的 Ionic Framework 设计一个应用程序 我配置了启动屏幕和图标 但当我在手机上运行该应用程序时 我仍然有默认的 Cordova 启动屏幕和图标 使用ionic run androi
  • 不完整日期的策略

    正在开发一个应用程序 我们希望用户能够输入不完整的日期 在某些情况下 只有一年 例如 1854 年 或者可能有一年和一个月 例如 1983 年 3 月 或者可能有完整的日期 2001 年 6 月 11 日 我们想要一个 日期 属性 列 并且
  • 在 Windows 上使用 bcrypt 3.0.1 和 ruby​​2.0 时出现问题

    有人在 Windows 8 上安装 bcrypt 3 0 1 或 3 1 2 时遇到任何问题吗 我尝试过测试不同的版本 但出现此错误 但运行 Rails 服务器后出现此错误 无法加载此类文件 2 0 bcrypt ext 您的应用程序中没有
  • 本地#includes

    有没有某种方法可以在本地 include 标准内容 一次针对一个函数 一个类等 而不是全局的 举一个非常简单的例子 人们可能想使用 std string 但它只在一个类中需要 并且您不希望它的开销无处不在 而不是制作 include本地 您
  • componentWillReceiveProps 未触发

    在我的其他课程中 componentWillReceiveProps 工作得很好 但由于某种原因 它在这里没有触发 ItemView jsx class ItemView extends React Component constructo
  • MySQL 中多列的不同

    我希望找出 MySQL 数据库中不同行的计数 id val1 val2 val3 1 1 1 1 2 1 1 1 3 2 2 2 4 2 2 2 在上表中 查询将返回 val1 val2 val3 count 1 1 1 2 2 2 2 2
  • 如何在 case_when 语句中检测多个正则表达式

    我最近从 ifelse 转换为case when from dplyr Aim 我希望能够使用以下命令从数据帧中的语句中检测多个正则表达式case when如下 Input statement lt data frame statement