我有一个包含列表的数据框,如下所示:
# Load packages
library(dplyr)
# Create data frame
df <- structure(list(ID = 1:3,
A = structure(list(c(9, 8), c(7,6), c(6, 9)), ptype = numeric(0), class = c("vctrs_list_of", "vctrs_vctr")),
B = structure(list(c(3, 5), c(2, 6), c(1, 5)), ptype = numeric(0), class = c("vctrs_list_of", "vctrs_vctr")),
C = structure(list(c(6, 5), c(7, 6), c(8, 7)), ptype = numeric(0), class = c("vctrs_list_of", "vctrs_vctr")),
D = structure(list(c(5, 3), c(4, 1), c(6, 5)), ptype = numeric(0), class = c("vctrs_list_of", "vctrs_vctr"))),
row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))
# Peek at data
df
#> # A tibble: 3 x 5
#> ID A B C D
#> <int> <list> <list> <list> <list>
#> 1 1 <dbl [2]> <dbl [2]> <dbl [2]> <dbl [2]>
#> 2 2 <dbl [2]> <dbl [2]> <dbl [2]> <dbl [2]>
#> 3 3 <dbl [2]> <dbl [2]> <dbl [2]> <dbl [2]>
我想解除列表的嵌套,可以使用pmap_dfr
.
# Expand rows
df %>% purrr::pmap_dfr(function(...)data.frame(...))
#> ID A B C D
#> 1 1 9 3 6 5
#> 2 1 8 5 5 3
#> 3 2 7 2 7 4
#> 4 2 6 6 6 1
#> 5 3 6 1 8 6
#> 6 3 9 5 7 5
Created on 2019-06-28 by the reprex package (v0.3.0)
这是期望的结果,但似乎是在重新发明轮子,因为tidyr::unnest
旨在将列表列展平回常规列。使用tidyr::unnest
但是会产生以下错误:
df %>% unnest(cols = c(A, B, C, D))
#Error: No common type for `x` <tbl_df<A:double>> and `y` <double>.
#Call `rlang::last_error()` to see a backtrace
我该如何申请unnest
在这种情况下,用列表列展平我的数据框?
版本信息
> packageVersion("tidyr")
[1] ‘0.8.3.9000’