regex - 将分层 data.frame 表示为嵌套列表

标签 regex r recursion

如何很好地将具有分层信息的 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 LayoutZoomable 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/

相关文章:

JavaScript 正则表达式忽略大小写

r - 从 flexmix 对象预测 (R)

r - 使代码和输出逐步出现在 R 演示文稿中

c - 递归函数输出不正确以计算数字的数字总和

递归计算从(0,0)到(x,y)的格子路径数

python - 在 python 中拆分一组大写字母

regex - Grails findByName正则表达式

javascript - 正则表达式用jQuery中的特殊字符替换子字符串

r - 如何为文本语句中的单词分配数字,然后将它们添加到 r 中?

javascript - 这段 JavaScript 代码会创建一个大堆栈吗?