在 R 中使用 grepl 的多个正则表达式

mutiple regular expression using grepl in R

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))

我想删除 tmaxstart OR tmin 和 'start' OR 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))]  

如果我没理解错,您可以结合 & 并在模式中使用 | 作为 OR 命令,例如

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

您还可以根据正则表达式将 select_atmatches 从 dplyr 到 select/drop 列一起使用。

library(dplyr)

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