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

如何用purrr::keep过滤含col3的嵌套列表元素?

问题:过滤嵌套列表中包含指定列的数据框

示例代码:

library(dplyr)
library(purrr)

df1 <- data.frame(
  col1 = 1:5,
  col2 = 6:10
)

df2 <- df1 %>% 
  mutate(col3 = 1:5)


ls <- list(
  a = list(df1 = df1),
  b = list(
    df1 = df1,
    df2 = df2
  ),
  c = list(
    df2 = df2
  )
)

需求:过滤嵌套列表ls,仅保留其中包含名为col3列的数据框,期望结果如下:

list(
  b = list(
    df2 = df2
  )
  ,c = list(
    df2 = df2
  )
)

当前尝试的代码接近目标,但未过滤掉顶级列表中过滤后为空的元素:

ls %>% 
  map(
    ~keep(.x, ~ "col3" %in% names(.x))
  )

解决方案

在原有代码基础上,添加一步过滤,移除顶级列表中为空的子列表即可:

ls %>% 
  map(~keep(.x, ~ "col3" %in% names(.x))) %>% 
  keep(~length(.x) > 0)

说明

  1. 第一步map遍历顶级列表的每个元素(a、b、c),对每个子列表使用keep筛选出包含col3列的数据框;
  2. 第二步keep过滤掉顶级列表中长度为0的空列表(比如a过滤后为空,会被移除),最终得到符合要求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:21:00