R语言如何查找dataframe中包含指定变量值的列序号
问题场景
现有测试数据框构造代码如下:
a <- c(2,5,90,77,56,65,85,75,12,24,52,32) b <- c(45,78,98,55,63,12,23,38,75,68,99,73) c <- c(77,85,3,22,4,69,86,39,78,36,96,11) d <- c(52,68,4,25,79,120,97,20,7,19,37,67) e <- c(14,73,91,87,94,38,1,685,47,102,666,74) df <- data.frame(a,b,c,d,e)
已定义目标值变量:
bb <- 120
需求:获取df中包含bb对应值的列编号。
实现方案
直接用R基础语法即可实现,无需安装第三方包,推荐写法:
# 计算返回包含目标值的列编号 which(colSums(df == bb, na.rm = TRUE) > 0)
代码逻辑说明
df == bb:逐元素判断数据框中每个值是否等于bb存储的目标值,返回和原数据框维度一致的布尔矩阵colSums(..., na.rm = TRUE):按列统计布尔值中TRUE的数量,加na.rm = TRUE是为了避免数据中存在缺失值导致计算结果异常- 最后用
which筛选出计数大于0的列位置,就是所有包含目标值的列编号
针对提供的测试数据,上述代码运行后会返回结果4,对应d列,和数据实际情况一致(d列第6个元素为120)。
如果数据量较小,也可以用apply逐列判断的写法,结果完全一致:
which(apply(df, 2, function(col) bb %in% col))
如果有多列同时包含目标值,上述两种写法都会自动返回所有符合条件的列编号,不需要额外调整。
内容的提问来源于stack exchange,提问作者bcsfh
相关产品推荐
相关产品推荐

