【发布时间】:2021-09-26 16:47:15
【问题描述】:
我有一个 ID 列,其格式应始终为 ABCDE123 - 五个字母和三个数字,没有间隔没有符号。
我确定有许多行没有正确遵循这种格式。是否可以按 R 中的字符串格式进行过滤,以便我可以识别这些行并查看它们?
Tidyverse 是首选,但任何解决方案都会有所帮助!
【问题讨论】:
我有一个 ID 列,其格式应始终为 ABCDE123 - 五个字母和三个数字,没有间隔没有符号。
我确定有许多行没有正确遵循这种格式。是否可以按 R 中的字符串格式进行过滤,以便我可以识别这些行并查看它们?
Tidyverse 是首选,但任何解决方案都会有所帮助!
【问题讨论】:
如果这些是 5 个大写字母后跟 3 个数字,请指定正则表达式以匹配从字符串的开头 (^) 开始的 5 个大写字母 [A-Z]{5},后跟 3 个数字 ([0-9]{3}) 在结尾 ( str_detect 中的字符串的$) 返回一个逻辑向量,用于filtering 数据行
library(dplyr)
library(stringr)
df1 %>%
filter(str_detect(ID, '^[A-Z]{5}[0-9]{3}$'))
如果应该删除这些行,请在 str_detect 中指定 negate = TRUE
df1 %>%
filter(str_detect(ID, '^[A-Z]{5}[0-9]{3}$', negate = TRUE))
或者正如 @BenBolker 在 cmets 中提到的那样,[[:upper:]]{5} 与 [A-Z]{5} 相比会更通用
【讨论】: