哪个是最好的方法来扁平化从关系数据库使用tidyverse工具派生的嵌套列表?
问题描述:
我有一个从REST调用收到的嵌套列表。响应包括来自底层关系数据库的嵌套的一组列表。我想将这个列表展平以简化分析。我试图遵循purrr tutorial中的指导原则,但我无法实现。哪个是最好的方法来扁平化从关系数据库使用tidyverse工具派生的嵌套列表?
我的简化输入
hist1 <- list(field="type", from_string ="issue", to_string="bug")
hist2 <- list(field="status", from_string ="open", to_string="closed")
hist3 <- list(field="type", from_string ="bug", to_string="issue")
issue1 <- list(id="123", created = "2017-11-08", issue_history = list(hist1, hist2))
issue2 <- list(id="124", created = "2017-11-10", issue_history = list(hist1, hist3))
issue <- list(issue1, issue2)
我找一个平坦的输出:
id created type from_string to_string
123 2017-11-08 type issue bug
123 2017-11-08 status open closed
123 2017-11-10 type bug issue
这是建设scable逻辑这个的最好方法?
最好的(对我来说):从tidyverse
- 工具
答
另一种解决方案通过@ Nate的回答启发:
map_df(issue, as_tibble) %>%
mutate(issue_history = map(issue_history, as_tibble)) %>%
unnest()
# A tibble: 4 x 5
# id created field from_string to_string
# <chr> <chr> <chr> <chr> <chr>
#1 123 2017-11-08 type issue bug
#2 123 2017-11-08 status open closed
#3 124 2017-11-10 type issue bug
#4 124 2017-11-10 type bug issue
答
不确定是否有更多purrr
这样做,但它的工作原理。
library(tidyverse)
map(issue, as.tibble) %>%
map_df(~ rowwise(.) %>%
mutate(issue_history = list(bind_rows(issue_history))) %>%
unnest())
# A tibble: 4 x 5
id created field from_string to_string
<chr> <chr> <chr> <chr> <chr>
1 123 2017-11-08 type issue bug
2 123 2017-11-08 status open closed
3 124 2017-11-10 type issue bug
4 124 2017-11-10 type bug issue
的帮助 @Psidom解决方案非常感谢对我来说也是维护复杂的少 – rgustavs