r - 使用 grepl 子集数据中的正则表达式异常
问题描述
我试图通过字段中的某些字符对 R 中的数据进行子集化,并且找不到正确的正则表达式逻辑来获得我需要的东西。我需要对 ID 包含的记录进行子集化:
- 只是“AB”
- “AB”和“ABC”
- 但不是只有“ABC”的字段
这些模式属于该数据集中字段的任何部分(开始、中间、结束),并且没有特定的分隔符。
示例数据集测试:
Record ID value
1 blueAB_ABC 7
2 green_ABCblue 9
3 ABC_green 45
4 green_AB 23
5 CD_red 45
所以对于这个例子,我想对记录 1 和 4 进行子集化。
我已经返回那些只有 AB 并且不包括 ABC 的人,但似乎找不到合适的正则表达式来获得所有“AB”和可能的“ABC”。
AB_set <- subset(TEST, grepl("*AB", ID) & !grepl("*ABC", ID) )
Record ID value
4 green_AB 23
我希望得到什么:
Record ID value
1 blueAB_ABC 7
4 green_AB 23
编辑:为了澄清起见,我更新了数据集以显示有问题的模式可能位于下划线以外的其他字符旁边,或者不一定出现在开头/结尾(如前所述,“没有特定的分隔符”)。
解决方案
您可以通过指定“AB”应由下划线或单词边界包围来获得此信息。
df[grepl("(\\b|_)AB(\\b|_)", df$ID),]
Record ID value
1 1 blue_AB_ABC 7
4 4 green_AB 23
推荐阅读
- database - 在 Oracle SQL developer 18.x 中配置 GIT
- rust - 如何编写只能与某种类型的迭代器一起使用的迭代器扩展?
- python-3.x - Python3 - 无法根据来自对象检测过程的输入正确启动输出设备
- java - 仅当在 Scala 中使用不相关的对象时才同步块
- math - 在 OBB(定向边界框)上查找特定点
- sql - SQL 更新列
- sql-server - 提高查询性能
- python - 我正在尝试重新调整与 MinMaxscaler 方法略有不同的数据框中的数字列
- python - Fail to load a subpart of "open-images-v6" with Fiftyone
- java - 数组列表未成功打印