如何提取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
相关产品推荐
相关产品推荐

