【问题标题】:Filter by string format in R在 R 中按字符串格式过滤
【发布时间】:2021-09-26 16:47:15
【问题描述】:

我有一个 ID 列,其格式应始终为 ABCDE123 - 五个字母和三个数字,没有间隔没有符号。

我确定有许多行没有正确遵循这种格式。是否可以按 R 中的字符串格式进行过滤,以便我可以识别这些行并查看它们?

Tidyverse 是首选,但任何解决方案都会有所帮助!

【问题讨论】:

    标签: r string filter tidyverse


    【解决方案1】:

    如果这些是 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} 相比会更通用

    【讨论】:

    • PS 希望频繁的 cmets 不会打扰你太多。我通常开始回答,但你回答得更快!
    • @BenBolker 一点也不。我很困惑 OP 从描述中想要哪个子集。感谢您指出。
    • df1 %>% filter(str_detect(ID, '^[AZ]{5}[0-9]{3}$') == FALSE) 允许我在删除之前查看不正确的条目他们。 [[:upper:]] 也很好用。
    猜你喜欢
    • 2018-02-16
    • 2011-08-14
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多