R语言数据框中如何删除列名包含指定字符串的列?
R 按列名包含特定字符串规则删列实现
注意:你提供的原始测试代码存在小瑕疵,构建数据框时引用了未定义的
age对象,对应之前实际定义的是agenn向量,先修正为可正常运行的基础版本:
name <- c("Jon", "Bill", "Maria") agenn <- c(23, 41, 32) agelk <- c(23, 41, 32) agepm <- c(23, 41, 32) # 修正原代码的引用错误,替换未定义的age为实际存在的agenn df <- data.frame(name, agenn, agelk, agepm) print(df)
基础R原生实现(无第三方包依赖)
无需安装额外包,通过正则匹配列名反向筛选即可,运行效率最高:
- 核心逻辑:先拼接待排除的字符串形成正则或匹配规则,标记所有命中待排除字符串的列,反向取不命中的列保留
# 定义需要排除的字符串集合 exclude_strs <- c("epm","enn","jkk") # 生成保留列的逻辑索引 keep_index <- !grepl(paste(exclude_strs, collapse = "|"), names(df)) # 生成过滤后的新数据框 df_filtered <- df[, keep_index]
如果待匹配的字符串包含.、*这类正则特殊字符,可在grepl中增加fixed=TRUE参数避免匹配规则歧义,写法调整为:
keep_index <- !grepl(paste(exclude_strs, collapse = "|"), names(df), fixed = TRUE)
tidyverse生态实现(适配日常dplyr工作流)
如果是常用dplyr做数据清洗的场景,用select搭配对应选择器的可读性更强:
library(dplyr) df_filtered <- df %>% # 直接排除列名包含任意待匹配字符串的列 select(-contains(any_of(c("epm","enn","jkk"))))
两种方法运行后效果一致:原数据框中带enn的agenn列、带epm的agepm列会被删除,最终保留name和agelk两列。
内容的提问来源于stack exchange,提问作者Tpellirn
相关产品推荐
相关产品推荐

