【发布时间】:2020-05-09 18:34:38
【问题描述】:
我想知道在下面的示例中是否有一种优雅且可通用的方式将 mylist 转换为 mydf。我查看了rectangling vignette,但 unnest/hoist 的示例似乎在具有常规但不整洁结构的列表中。
mylist <- list(name = "example",
idnum = 123,
cases = list(
case1 = list(
type = 1,
genre = "A"),
case2 = list(
type = 1,
genre = "B"),
case3 = list(
type = 2,
genre = "A"
)))
mydf <- data.frame(name = rep("example", 3),
idnum = rep(123, 3),
cases = c("case1", "case2", "case3"),
type = c(1, 1, 2),
genre = c("A", "B", "A"))
编辑:这接近我想要的,但我丢失了案例名称
mylist %>%
as_tibble %>%
unnest_wider(cases)
# A tibble: 3 x 4
name idnum type genre
<chr> <dbl> <dbl> <chr>
1 example 123 1 A
2 example 123 1 B
3 example 123 2 A
【问题讨论】:
-
使用
purrr,您可以尝试mylist %>% map_at("cases", ~ map_dfr(., data.frame, .id = "cases")) %>% as_tibble()。 -
我认为这是正确的轨道,使用 map_if(is_list, ....) 我们也许能够获得不需要指定我正在寻找的“案例”的通用解决方案