R语言:如何筛选数据框中含特定元素的字符向量列所在行
筛选字符向量列中包含指定元素的行
首先构造符合你描述的示例数据框:
library(dplyr) df <- tibble( ID = 1:3, OtherCol = c("X", "Y", "Z"), String = list(c("ABCD", "A", "AB"), c("XYZ", "Q", "ABCD"), c("AB", "A")) )
你遇到的问题是filter默认会把整个字符向量(list元素)当作整体比较,而非检查向量内部的元素。下面是几种可行的解决方案:
方法一:用purrr的map_lgl配合filter
map_lgl可以遍历String列的每个字符向量,返回逻辑向量标记每行是否包含目标元素:
library(purrr) filtered_df <- df %>% filter(map_lgl(String, ~ "ABCD" %in% .x))
方法二:base R的sapply配合filter
如果不想加载额外包,用base R的sapply也能实现相同逻辑:
filtered_df <- df %>% filter(sapply(String, function(vec) "ABCD" %in% vec))
方法三:用rowwise逐行判断
通过rowwise()让dplyr按行处理,即可对每行的String向量做元素级检查:
filtered_df <- df %>% rowwise() %>% filter("ABCD" %in% String) %>% ungroup() # 记得取消按行分组,避免影响后续操作
以上三种方法都能筛选出String列中包含"ABCD"的行,最终结果会保留示例中的前两行数据。
内容的提问来源于stack exchange,提问作者R2022
相关产品推荐
相关产品推荐

