【问题标题】:mutiple regular expression using grepl in R在 R 中使用 grepl 的多个正则表达式
【发布时间】:2020-03-21 21:50:00
【问题描述】:
dat <- data.frame(tmax.p.start_d = rnorm(1),
                  tmin.p.start_d = rnorm(1),
                  rain.p.start_d = rnorm(1),

                  tmax.p.end_d = rnorm(1),
                  tmin.p.end_d = rnorm(1),
                  rain.p.end_d = rnorm(1))

我想删除tmaxstarttmin 和“开始”或rainstart 的所有列。所以最终的数据框将只有tmax.p.end_dtmin.p.end_drain.p.end_d。以下命令仅适用于单个模式。是否可以将上述所有条件包含在一个表达式中

      dat[, !grepl(pattern="tmax", colnames(dat))] 
      dat[, !grepl(pattern="tmin", colnames(dat))]  
      dat[, !grepl(pattern="rain", colnames(dat))]  

【问题讨论】:

    标签: r regex grepl


    【解决方案1】:

    如果我理解正确,您可以结合 &amp; 并在一个模式中使用 | 来充当 OR 命令,例如

    # not (start and (tmax or tmin or rain))
    dat[, !(grepl(pattern="start", colnames(dat)) & 
              grepl(pattern="tmax|tmin|rain", colnames(dat)))] 
    

    【讨论】:

      【解决方案2】:

      您还可以使用 dplyr 中的 select_atmatches 来根据正则表达式选择/删除列。

      library(dplyr)
      
      dat %>% 
        select_at(vars(-matches('start', 'tmin|tmax|rain')))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-24
        • 1970-01-01
        • 1970-01-01
        • 2021-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多