【发布时间】:2019-03-20 16:30:13
【问题描述】:
我有一个嵌套列表如下:
mylist <- list(
list(
id = 1234,
attributes = list(
list(
typeId = 11,
type = 'Main',
date = '2018-01-01',
attributes= list(
list(
team = 'team1',
values = list(
value1 = 1,
value2 = 999)),
list(
team = 'team2',
values = list(
value1 = 2,
value2 = 888))
)
),
list(
typeId = 12,
type = 'Extra',
date = '2018-01-02',
attributes= list(
list(
team = 'team1',
values = list(
value1 = 3,
value2 = 1234)),
list(
team = 'team2',
values = list(
value1 = 4,
value2 = 9876))
)
)
)
)
)
我想将其转换为一个数据框,其中每个子条目与其所有父条目一起排成一行。所以我最终会得到一个看起来像
的数据框 id type_id type date team value1 value2
1 1234 11 Main 2018-08-01 team1 1 999
2 1234 11 Main 2018-08-01 team2 2 888
3 1234 12 Extra 2018-08-02 team1 3 1234
4 1234 12 Extra 2018-08-02 team2 4 9876
我并不总是知道列表中的名称,因此需要一种通用的方法来执行此操作而不指定列名
编辑
我对我最初的问题有一个答案,但在回应 Parfaits 评论“如果您发布原始 JSON 和您的 R 导入代码,可能会提供更简单的解决方案”。
我使用 R 代码从 url 获取我的原始 JSON:
httr::GET(
feed_url,
authenticate(username, password)
) %>%
httr::content()
在 url 中 JSON 看起来像:
[{"id":[1234],"attributes":[{"typeId":[11],"type":["Main"],"date":["2018-01-01"],"attributes":[{"team":["team1"],"values":{"value1":[1],"value2":[999]}},{"team":["team2"],"values":{"value1":[2],"value2":[888]}}]},{"typeId":[12],"type":["Extra"],"date":["2018-01-02"],"attributes":[{"team":["team1"],"values":{"value1":[3],"value2":[1234]}},{"team":["team2"],"values":{"value1":[4],"value2":[9876]}}]}]}]
【问题讨论】:
-
你是怎么得到这么深嵌套的列表的?您是导入 JSON 还是 XML?我们可以帮助完成这一步。
-
从 JSON 导入。现在有一个转换列表的功能,虽然谢谢,请参阅下面的答案
-
如果您发布原始 JSON 和您的 R 导入代码,可能会有更简单的解决方案。