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

如何用dplyr/purrr提取包含特定值house的数据框列名?

解决方案:提取包含指定值的列名(dplyr/purrr实现)

针对你的需求,这里提供几种基于dplyr和purrr的实现方式,直接返回字符型列名:

方法1:select() + where() 组合

利用where()筛选符合条件的列,再通过names()提取列名:

library(dplyr)
library(stringr)

my_data <- tribble(
  ~item1, ~item2,
  "car", "ferrari",
  "house", "3 bed",
  NA, "3"
)

# 提取包含"house"的列名
names(my_data %>% select(where(~ any(str_detect(.x, "house"), na.rm = TRUE))))
  • where()内部的函数会逐列检查:该列是否存在任意一个元素匹配"house"
  • na.rm = TRUE用于忽略NA值干扰,避免因列中存在NA导致判断结果为NA

方法2:summarise() + 长格式转换

先汇总每列的匹配结果,再筛选出符合条件的列名:

my_data %>%
  # 逐列判断是否存在匹配值
  summarise(across(everything(), ~ any(str_detect(.x, "house"), na.rm = TRUE))) %>%
  # 转成长格式方便筛选
  pivot_longer(everything(), names_to = "col_name", values_to = "has_house") %>%
  # 筛选出存在匹配值的行
  filter(has_house) %>%
  # 提取列名字段
  pull(col_name)

方法3:purrr::keep()

用purrr的keep()函数保留符合条件的列,再取列名:

library(purrr)

my_data %>%
  keep(~ any(str_detect(.x, "house"), na.rm = TRUE)) %>%
  names()

这三种方法都能直接返回你需要的字符型列名"item1",完全基于dplyr/purrr生态,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:37:09