r-删除与模式匹配的列,但出现异常



我有如下示例数据:

dat <- mtcars
dat$add <- dat[,1]
dat$last <- dat[,1]
names(dat) <- c("fraction_low", "fraction_medium", "fraction_high", "fraction_low_2000", "fraction_medium_2000", "fraction_high_2000","fraction_low_2001", "fraction_medium_2001", "fraction_high_2001","fraction_low_comb", "fraction_medium_comb", "fraction_high_comb", "last")

我希望删除名称中包含fractionlowmediumhigh的所有列/变量名,,但名称中也包含comb的列/变量名称除外。

我在这里找到了很多删除具有特定模式的列的好答案。例如:

library(dplyr)
dat %>% select( -( contains("fraction") & ( (contains("low") | contains("medium") | contains("high") ) )))

但是,我应该如何实现和例外这样的模式?

期望输出:

desired_output <- dat[,10:13]
fraction_low_comb fraction_medium_comb fraction_high_comb last
Mazda RX4                           4                    4               21.0 21.0
Mazda RX4 Wag                       4                    4               21.0 21.0
Datsun 710                          4                    1               22.8 22.8
Hornet 4 Drive                      3                    1               21.4 21.4

我们可以使用

library(dplyr)
dat %>%
select(-matches(c("fraction", "low", "high", "medium")), contains("comb")) 

或者可以使用

dat %>% 
select(-matches("fraction_(low|medium|high)_(?!comb)|fraction_(low|medium|high)$",
perl = TRUE)) 

最新更新