R语言中按匹配模式删列并设置例外规则的实现方法
解决方案:按列名模式筛选并保留例外列
方法一:使用dplyr包
你可以通过调整筛选逻辑,把「包含comb的列」从待删除列表中排除。核心思路是:只删除同时包含fraction、low/medium/high,且不包含comb的列,代码如下:
library(dplyr) dat_filtered <- dat %>% select(!(contains("fraction") & (contains("low") | contains("medium") | contains("high")) & !contains("comb")))
逻辑拆解:
contains("fraction") & (contains("low") | contains("medium") | contains("high"))定位所有你原本想删除的列- 加上
& !contains("comb"),把带comb的例外列从删除列表中剔除 - 用
!取反,最终保留符合要求的列(三个comb列 + last列)
方法二:基础R实现(无需额外包)
如果不想依赖dplyr,用基础R的字符串匹配也能实现:
# 获取所有列名 col_names <- names(dat) # 定义需要删除的列的规则 to_drop <- grepl("fraction", col_names) & grepl("low|medium|high", col_names) & !grepl("comb", col_names) # 筛选保留的列 dat_filtered <- dat[, !to_drop]
验证结果
运行上述代码后,dat_filtered的结构和你给出的desired_output完全一致:
# 查看结果 head(dat_filtered)
输出:
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 Hornet Sportabout 3 2 18.7 18.7 Valiant 3 1 18.1 18.1
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

