使用 purrr::keep 过滤列表列表

问题描述 投票:0回答:1

我的代表如下:

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
,以便保留
ls
中名称包含
col3
的元素。

我尝试过使用 keep,但无法在正确的深度正确索引。

预期解决方案:

list(
  b = list(
    df2 = df2
  )
  ,c = list(
    df2 = df2
  )
)
r list nested purrr
1个回答
0
投票

使用

purrr
执行此操作的一种方法是使用
modify_tree
递归树以查找每个叶子的名称,以及
keep()
那些以
col3
作为名称的元素:

keep(
    ls,
    \(x) "col3" %in% unlist(modify_tree(x, leaf = names))
)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.