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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:00:58