gpt4 book ai didi

r - 扁平化嵌套在 data.frames 中的列表

转载 作者:行者123 更新时间:2023-12-05 00:15:19 25 4
gpt4 key购买 nike

我遇到了很多嵌套在 data.frame 列中的列表,并且在可能的情况下看不到任何用于展平这些列表的通用方法 - 即当嵌套元素可能被强制转换为具有与父元素相同行数的 data.frame 时。考虑此类嵌套的这些示例:

require(dplyr)
data_frame(a=1:3, b = c('a','b','c'), c = list('cats','dogs','birds'))
#> # A tibble: 3 x 3
#> a b c
#> <int> <chr> <list>
#> 1 1 a <chr [1]>
#> 2 2 b <chr [1]>
#> 3 3 c <chr [1]>
data_frame(a=1:3, b = c('a','b','c'), c = list(iris[1:3,]))
#> # A tibble: 3 x 3
#> a b c
#> <int> <chr> <list>
#> 1 1 a <data.frame [3 x 5]>
#> 2 2 b <data.frame [3 x 5]>
#> 3 3 c <data.frame [3 x 5]>
data_frame(a=1:3, b = c('a','b','c'), c = list(iris[1,], iris[2,], iris[3,]))
#> # A tibble: 3 x 3
#> a b c
#> <int> <chr> <list>
#> 1 1 a <data.frame [1 x 5]>
#> 2 2 b <data.frame [1 x 5]>
#> 3 3 c <data.frame [1 x 5]>

有没有一种优雅的通用方法来展平这些?我找到的最接近的是 jsonlite::flatten ,它声称“展平嵌套数据框”,但它似乎无法处理嵌套列表,例如在这些示例中。

最佳答案

一种选择是 unnest

library(tidyr)
data_frame(a=1:3, b = c('a','b','c'), c = list('cats','dogs','birds')) %>%
unnest
# A tibble: 3 x 3
# a b c
# <int> <chr> <chr>
#1 1 a cats
#2 2 b dogs
#3 3 c birds


data_frame(a=1:3, b = c('a','b','c'), c = list(iris[1:3,])) %>%
unnest
# A tibble: 9 x 7
a b Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# <int> <chr> <dbl> <dbl> <dbl> <dbl> <fctr>
#1 1 a 5.1 3.5 1.4 0.2 setosa
#2 1 a 4.9 3.0 1.4 0.2 setosa
#3 1 a 4.7 3.2 1.3 0.2 setosa
#4 2 b 5.1 3.5 1.4 0.2 setosa
#5 2 b 4.9 3.0 1.4 0.2 setosa
#6 2 b 4.7 3.2 1.3 0.2 setosa
#7 3 c 5.1 3.5 1.4 0.2 setosa
#8 3 c 4.9 3.0 1.4 0.2 setosa
#9 3 c 4.7 3.2 1.3 0.2 setosa

data_frame(a=1:3, b = c('a','b','c'), c = list(iris[1,], iris[2,], iris[3,])) %>%
unnest
# A tibble: 3 x 7
# a b Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# <int> <chr> <dbl> <dbl> <dbl> <dbl> <fctr>
#1 1 a 5.1 3.5 1.4 0.2 setosa
#2 2 b 4.9 3.0 1.4 0.2 setosa
#3 3 c 4.7 3.2 1.3 0.2 setosa

关于r - 扁平化嵌套在 data.frames 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44791979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com