首页 > 解决方案 > 如何过滤掉 tibble 列表列的 NULL 元素

问题描述

我有一个像下面这样的小标题:

structure(list(id = 1:11, var1 = c("A", "C", "B", "B", "B", "A", 
"B", "C", "C", "C", "B"), var2 = list(NULL, NULL, NULL, structure(list(
    x = c(0, 1, 23, 3), y = c(0.75149005651474, 0.149892757181078, 
    0.695984086720273, 0.0247649133671075)), row.names = c(NA, 
-4L), class = c("tbl_df", "tbl", "data.frame")), NULL, NULL, 
    NULL, NULL, NULL, NULL, NULL)), row.names = c(NA, -11L), class = c("tbl_df", 
"tbl", "data.frame"))

我只想留下var2不为空的行。但简单的!is.null()就是行不通。df %>% filter(!is.null(var2))返回整个df. 为什么会这样?如何过滤掉所有列NULL中的行var2

标签: rdplyr

解决方案


还涉及的一种可能性purrr可能是:

df %>%
 filter(!map_lgl(var2, is.null))

     id var1  var2            
  <int> <chr> <list>          
1     4 B     <tibble [4 × 2]>

反映 的属性is.null(),您还可以执行以下操作:

df %>%
 rowwise() %>%
 filter(!is.null(var2))

推荐阅读