我的目标是采用这样的嵌套列表:
list1 <- list(1,2,3,4,5)
list2 <- list(6,7,8,9,10)
list3 <- list(11,12,13,14,15)
nested_list <- list(list1, list2, list3)
并创建一个数据框,其中列数 = 嵌套列表中嵌入的列表数。换句话说,我试图将 list1、list2 和 list3 全部放入数据框的单独列中。
我尝试过使用 tidyr 中的一些函数,例如“unnest_wider”,但运气不佳。大多数函数都是为了将每个嵌套列表转换为观察(行)而不是列。我知道我可以运行某种循环来执行此操作,但这种方法不是很有效。
最佳答案
如果您使用任何 data.frame
查看 unclass(df)
,您可以看到(尽管有属性)一个 data.frame
> 基本上已经有了你所拥有的数据结构。知道这一点后,我们只需取消列出
列表中的列表即可。
一句话:
as.data.frame(lapply(nested_list, unlist))
#> c.1..2..3..4..5. c.6..7..8..9..10. c.11..12..13..14..15.
#> 1 1 6 11
#> 2 2 7 12
#> 3 3 8 13
#> 4 4 9 14
#> 5 5 10 15
或者使用tidyverse
:
library(tidyverse)
as_tibble(nested_list, .name_repair = "universal") %>%
unnest(everything())
#> New names:
#> * `` -> ...1
#> * `` -> ...2
#> * `` -> ...3
#> # A tibble: 5 x 3
#> ...1 ...2 ...3
#> <dbl> <dbl> <dbl>
#> 1 1 6 11
#> 2 2 7 12
#> 3 3 8 13
#> 4 4 9 14
#> 5 5 10 15
列名困惑的原因是列表元素没有名称。如果它们有名称,您会看到它们在两个解决方案中都成为列名称。
关于r - 如何将嵌套列表分解为数据框,其中每个嵌入列表成为单独的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60437087/