如何在R语言dplyr中精确筛选含'high'的列并排除'modhigh'?
精准筛选不含modhigh的high列
首先构造示例数据框:
df1 <- data.frame(x1_modhigh_2020 = 1, x2_modhigh_2030 = 1, x1_low_2020 = 1, x2_low_2030 = 1, x1_high_2020 = 1, x2_high_2030 = 1)
你遇到的核心问题是contains("high")会匹配到modhigh里的high,这里提供几种可行的修改方案:
利用列名结构匹配下划线包裹的high
因为你的列名里纯high是被下划线包围的(_high_),可以用matches()结合这个特征精准筛选:library(dplyr) df1 %>% select(matches("_high_"))用正则负向前瞻排除mod前缀的high
通过正则表达式的负向前瞻语法,确保high前面没有mod,从而排除modhigh列:df1 %>% select(matches("(?<!mod)high"))组合contains筛选与反向排除
先选中所有含high的列,再排除其中含modhigh的列:df1 %>% select(contains("high"), !contains("modhigh"))
如果要在for循环中批量处理这三类列,可以把筛选条件整理成正则向量,循环执行:
filter_patterns <- c("low", "modhigh", "(?<!mod)high") for (pattern in filter_patterns) { target_df <- df1 %>% select(matches(pattern)) # 在这里添加你需要执行的操作,比如分析、转换等 cat("当前筛选的列:", colnames(target_df), "\n") }
内容的提问来源于stack exchange,提问作者89_Simple
相关产品推荐
相关产品推荐

