我有如下示例数据:
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")
我希望删除名称中包含fraction
和low
、medium
或high
的所有列/变量名,,但名称中也包含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))