如何使用list_rbind在列表中保留命名但0行的小标题?

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

假设我有一个包含命名元素的列表。元素是 tibbles。 我想将列表转换为一个小标题。

purrr 的

list_rbind
可以工作,但有一个严重的缺点(至少对于我的目的而言),它会放弃 元素是 0 行 tibble(尽管它是命名元素)。

library(tidyverse)

li <- list("a"=tibble(x=1), "b"=tibble(x=2), "c"=tibble(x=NULL))
li
#> $a
#> # A tibble: 1 × 1
#>       x
#>   <dbl>
#> 1     1
#> 
#> $b
#> # A tibble: 1 × 1
#>       x
#>   <dbl>
#> 1     2
#> 
#> $c
#> # A tibble: 0 × 0


li %>% purrr::list_rbind(., names_to="element_names")

#> # A tibble: 2 × 2
#>   element_names     x
#>   <chr>         <dbl>
#> 1 a                 1
#> 2 b                 2

我正在寻找的结果是

#>   element_names     x
#>   <chr>         <dbl>
#> 1 a                 1
#> 2 b                 2
#> 3 c                 NA (or NULL?)

有什么帮助吗?非常感谢。

r purrr
1个回答
0
投票

您可以有条件地使用
add_row()
 
map()

library(purrr)
library(dplyr)

li <- list("a"=tibble(x=1), "b"=tibble(x=2), "c"=tibble(x=NULL))

li <- map(li, \(x){
  if(nrow(x) == 0){
    add_row(x)
  } else x
})

li %>% purrr::list_rbind(., names_to="element_names")
#> # A tibble: 3 × 2
#>   element_names     x
#>   <chr>         <dbl>
#> 1 a                 1
#> 2 b                 2
#> 3 c                NA

创建于 2024-01-23,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.