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

如何提取R语言中匹配指定字符串的数据框列名?

提取数据框中匹配指定字符串的列名

我想从数据框里提取匹配指定字符串的列名,之前找到的方法都是用逻辑向量做子集化操作(比如用grepl筛选列),但我只想得到符合条件的列名,不需要对数据框做子集化。

比如有这样的数据框:

# 数据
df <- data.frame( ABC_1 = runif(3),
            ABC_2 = runif(3),
            XYZ_1 = runif(3),
            XYZ_2 = runif(3) )

# 数据框内容
#      ABC_1     ABC_2     XYZ_1     XYZ_2
#1 0.3792645 0.3614199 0.9793573 0.7139381
#2 0.1313246 0.9746691 0.7276705 0.0126057
#3 0.7282680 0.6518444 0.9531389 0.9673290

之前用grepl做子集化的方法是这样的:

# 使用grepl筛选列
df[ , grepl( "ABC" , names( df ) ) ]
# 子集化结果
#      ABC_1     ABC_2
#1 0.3792645 0.3614199
#2 0.1313246 0.9746691
#3 0.7282680 0.6518444

# grepl返回的逻辑向量
grepl( "ABC" , names( df ) )
#[1]  TRUE  TRUE FALSE FALSE

但我不需要子集化后的数据集,只想得到匹配"ABC"的列名,期望输出是:

output <- c("ABC_1", "ABC_2")

解决方案

直接对数据框的列名向量(names(df))做筛选即可,不需要操作整个数据框,以下是几种常用方法:

方法1:基础R + grepl

利用grepl返回的逻辑向量,直接筛选列名向量:

output <- names(df)[grepl("ABC", names(df))]

方法2:基础R + grep(更简洁)

grep支持通过value=TRUE参数直接返回匹配的字符串,无需额外处理:

output <- grep("ABC", names(df), value = TRUE)

方法3:stringr包的str_subset(可读性更强)

如果常用stringr包处理字符串,用str_subset可以更直观地筛选:

library(stringr)
output <- str_subset(names(df), "ABC")

以上三种方法运行后,output都会得到你想要的c("ABC_1", "ABC_2")结果。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:30:46