如何很好地将具有分层信息的 data.frame 转换为 JSON(或嵌套列表)?
假设我们有以下数据框:
df <- data.frame(
id = c('1', '1.1', '1.1.1', '1.2'),
value = c(10, 5, 5, 5))
# id value
# 1 10
# 1.1 5
# 1.1.1 5
# 1.2 5
然后我想得到以下 JSON:
{
"id": "1",
"value": 10,
"children": [
{
"id": "1.1",
"value": 5,
"children": [
{
"id": "1.1.1",
"value": 5
}
]
},
{
"id": "1.2",
"value": 5
}
]
}
其中id
定义了层次结构,.
是分隔符。
我的目的是能够轻松地将数据从 R 转换为分层 D3 可视化(例如 Partition Layout 或 Zoomable Treemaps )。如果可以添加更多“值(value)”列,那就太好了;例如值
、尺寸
、重量
等
谢谢!
编辑:我恢复了原来的问题,因此更容易理解所有答案(对所有编辑感到抱歉)。
最佳答案
我倾向于安装RJSONIO
,它的作用是:
R> df <- data.frame(id = c('1', '1.1', '1.1.1', '1.2'), value = c(10, 5, 5, 5))
R> RJSONIO::toJSON(df)
[1] "{\n \"id\": [ \"1\", \"1.1\", \"1.1.1\", \"1.2\" ],\n\"value\": [ 10, 5, 5, 5 ] \n}"
R> cat(RJSONIO::toJSON(df), "\n")
{
"id": [ "1", "1.1", "1.1.1", "1.2" ],
"value": [ 10, 5, 5, 5 ]
}
R>
这不是您想要的输出,但所需的嵌套/层次结构不出现在data.frame中。我认为如果您将 data.frame 嵌套在列表中,您就会到达那里。
编辑:对于您修改后的问题,以下是读取您指定的 JSON 后的 R 输出:
R> RJSONIO::fromJSON("/tmp/foo.json")
$id
[1] "1"
$value
[1] 10
$children
$children[[1]]
$children[[1]]$id
[1] "1.1"
$children[[1]]$value
[1] 5
$children[[1]]$children
$children[[1]]$children[[1]]
$children[[1]]$children[[1]]$id
[1] "1.1.1"
$children[[1]]$children[[1]]$value
[1] 5
$children[[2]]
$children[[2]]$id
[1] "1.2"
$children[[2]]$value
[1] 5
R>
关于regex - 将分层 data.frame 表示为嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14529576/