【问题标题】:Replace strings with numbers except those that contains 2020 or 2021 in R data frame用数字替换字符串,除了 R 数据框中包含 2020 或 2021 的字符串
【发布时间】:2021-06-08 18:46:37
【问题描述】:

我有一个要过滤的二元组列表。 想要删除所有带数字的二元组,包含 2021 或 2020 的二元组除外

cat <- seq(1,7)
bg <- c("2021 test", "z1 trip", "00034 job","18 mar", "2021 day","business unit", "cycle work")
df <- data.frame(cat,bg)

我尝试过嵌套的 grepl,但它不起作用

df %>% filter(!grepl("[[:digit:]]",!grepl("2020|2021",bg)))

预期的输出是:

【问题讨论】:

    标签: r regex dataframe filter


    【解决方案1】:

    我们可以使用非常简单的正则​​表达式模式来检查是否有 4 位数字 (\\b\\d{4}]]b) 或 (|) 如果从开始 (^) 到结束没有数字($) 的字符串

    library(dplyr)
    library(stringr)
    df %>%
       filter(str_detect(bg, '\\b\\d{4}\\b|^[^0-9]+$')) %>%
       mutate(cat = row_number())
    

    输出

    #  cat            bg
    #1   1     2021 test
    #2   2      2021 day
    #3   3 business unit
    #4   4    cycle work
    

    如果还有其他数字,例如“0004”,并且只想要那些以“20”开头的数字

    df %>%
       filter(str_detect(bg, '\\b20\\d{2}\\b|^[^0-9]+$')) %>%
       mutate(cat = row_number())
    

    【讨论】:

      【解决方案2】:

      一个简单的方法是:

      subset(df, grepl("2021|2020", bg)|!grepl("\\d", bg))
      #   cat            bg
      # 1   1     2021 test
      # 5   5      2021 day
      # 6   6 business unit
      # 7   7    cycle work
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2019-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多