You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 15:24:00