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

