r - 正则表达式 R 的 IF 过滤器
问题描述
我想根据与 R 中某些术语的字符串匹配在数据框(或数据表)中创建一个标志。
df = data.frame(text = c("AABA","AACA","AAAA","BAAE","CAAD","CCCC","DDDD","EEEE"))
df$flag[stri_detect_regex(df$text,"AAB|AAC|AAA|BAA|CAA")] = 'Match1'
显示如下输出:
text flag
1 AABA Match1
2 AACA Match1
3 AAAA Match1
4 BAAE Match1
5 CAAD Match1
6 CCCC <NA>
7 DDDD <NA>
8 EEEE <NA>
然后我想检查另一种模式:
df$flag[stri_detect_regex(df$text,"CCCC|DDDD")] = 'Match2'
但仅在标志为 NA 时运行,即 is.na(df$flag)。很高兴知道我是否可以包含多个条件,即
is.na(df$flag) & df$other_var == 1
我想这样做的原因是我需要审查数百万行,并且只想对还没有标志和/或包含其他过滤条件的行执行正则表达式。谢谢您的帮助!
解决方案
我们可以用case_when
library(dplyr)
library(stringi)
df %>%
mutate(flag = case_when(stri_detect_regex(text, "AAB|AAC|AAA|BAA|CAA") ~ "Match1",
stri_detect_regex(text, "CCCC|DDDD") ~ "Match2"))
推荐阅读
- dynamics-crm - 用于将 AD 用户添加到 Microsoft Dynamics 365 帐户的脚本
- arrays - 如何使用循环在 Assembly 中查找数组的最小值和最大值?
- java - GeoAPIContext 崩溃
- angular - Angular 6:TypeError:无法读取 null 的属性“scrollIntoView”
- angularjs - 如何为使用 ng-material-multilevel-menu 显示的数据附加椭圆
- java - 在场景生成器中处理鼠标事件时,Java FXML GridPane.getRowIndex(source) 总是返回 null
- java - 使用 react native 构建完整的应用程序后如何获取 java 代码?
- visual-studio - 将空白页添加到新的 C++/WinRT 桌面项目时出现无效标记错误
- java - 如何根据 2 个参数查询 SQLite 表?
- java - 在 Java 中安全地开发 SQL 查询