【发布时间】:2021-04-26 18:00:48
【问题描述】:
我的数据输入来自 JSON 数据,列表中的名称是来自 JSON 的键/值对的键。所以它看起来像这样:
# Dummy data
doc1 <- list(type = "HTML",
garbage = "blahblah",
`1 - 28` = list(food = "pizza",
birthdate = "12-31-89",
name = "Jill"),
`3 - 36` = list(pet = "gerbil",
gender = "female"))
doc2 <- list(type = "XLS",
`2 - 2` = list(hour = "now",
profession = "Engineer"),
`3 - 36` = list(name = "Fred",
age = "36"))
input <- list(doc1 = doc1, doc2 = doc2)
我想将数据“矩形化”以便于分析,所以它看起来像这样:
# A tibble: 9 x 5
doc type location column value
<chr> <chr> <chr> <chr> <chr>
1 doc1 HTML 1 - 28 food pizza
2 doc1 HTML 1 - 28 birthdate 12-31-89
3 doc1 HTML 1 - 28 name Jill
4 doc1 HTML 3 - 36 pet gerbil
5 doc1 HTML 3 - 36 gender female
6 doc2 XLS 2 - 2 hour now
7 doc2 XLS 2 - 2 profession Engineer
8 doc2 XLS 3 - 36 name Fred
9 doc2 XLS 3 - 36 age 36
复杂之处在于
- 嵌套词条有不同的索引,有时有些列我根本不需要(例如,
garbage) - 较低的嵌套都有不同的名称
我有一个 for-loop 循环遍历文档并提取所有适当的值,但这需要相当长的时间处理大文件。我发现purrr 包中的map 函数可用于提取某些列(请参阅this tutorial)。但是当我不知道列名或索引时,我似乎无法让 map 工作。
# Work so far
input %>% {
tibble(
doc = names(.),
type = map(., "type")
)
} %>%
unnest(cols = c(type))
我觉得thisvignette 有一把钥匙。
【问题讨论】: