首页 > 解决方案 > 使用 grepl 子集数据中的正则表达式异常

问题描述

我试图通过字段中的某些字符对 R 中的数据进行子集化,并且找不到正确的正则表达式逻辑来获得我需要的东西。我需要对 ID 包含的记录进行子集化:

这些模式属于该数据集中字段的任何部分(开始、中间、结束),并且没有特定的分隔符。

示例数据集测试:

 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

编辑:为了澄清起见,我更新了数据集以显示有问题的模式可能位于下划线以外的其他字符旁边,或者不一定出现在开头/结尾(如前所述,“没有特定的分隔符”)。

标签: r

解决方案


您可以通过指定“AB”应由下划线或单词边界包围来获得此信息。

 df[grepl("(\\b|_)AB(\\b|_)", df$ID),]
  Record          ID value
1      1 blue_AB_ABC     7
4      4    green_AB    23

推荐阅读