我的最終遊戲是使用D3js從分層JSON文件創建樹形圖。R使用JSONLITE分層JSON?
我需要表示的等級是這張圖,其中A有孩子B,C,D; B有孩子E,F,G; C有孩子H,I; D沒有孩子。節點將具有多個鍵:值對。爲簡單起見,我僅列出3個。 R中
-- name:E
| type:dkBlue
| id: 005
|
|-- name:F
-- name:B ------| type:medBlue
| type:blue | id: 006
| id:002 |
| |-- name:G
| type:ltBlue
name:A ----| id:007
type:colors|
id:001 |-- name:C ----|-- name:H
| type:red | type:dkRed
| id:003 | id:008
| |
| |
| |-- name:I
| type:medRed
| id:009
|-- name:D
type:green
id: 004
我的源數據是這樣的:
nodes <-read.table(header = TRUE, text = "
ID name type
001 A colors
002 B blue
003 C red
004 D green
005 E dkBlue
006 F medBlue
007 G ltBlue
008 H dkRed
009 I medRed
")
links <- read.table(header = TRUE, text = "
startID relation endID
001 hasSubCat 002
001 hasSubCat 003
001 hasSubCat 004
002 hasSubCat 005
002 hasSubCat 006
002 hasSubCat 007
003 hasSubCat 008
003 hasSubCat 009
")
我必須把它轉換成以下JSON:
{"name": "A",
"type": "colors",
"id" : "001",
"children": [
{"name": "B",
"type": "blue",
"id" : "002",
"children": [
{"name": "E",
"type": "dkBlue",
"id" : "003"},
{"name": "F",
"type": "medBlue",
"id": "004"},
{"name": "G",
"type": "ltBlue",
"id": "005"}
]},
{"name": "C",
"type": "red",
"id" : "006",
"children": [
{"name": "H",
"type": "dkRed",
"id" : "007"},
{"name": "I",
"type": "dkBlue",
"id": "008"}
]},
{"name": "D",
"type": "green",
"id" : "009"}
]}
我希望你可以提供任何幫助!
[更新2017年4月18日]
基於伊恩的引用我看着成R的data.tree。如果我重構我的數據,我可以重新創建我的層次結構,如下所示。請注意,我已經失去了每個節點之間的關係類型(hasSubcat),其值在現實生活中對於每個鏈接/邊緣都會有所不同。如果我能得到可行的層次結構,我願意放手(現在)。對於data.tree修訂後的數據:
df <-read.table(header = TRUE, text = "
paths type id
A colors 001
A/B blue 002
A/B/E dkBlue 005
A/B/F medBlue 006
A/B/G ltBlue 007
A/C red 003
A/C/H dkRed 008
A/C/I medRed 009
A/D green 004
")
myPaths <- as.Node(df, pathName = "paths")
myPaths$leafCount/(myPaths$totalCount - myPaths$leafCount)
print(myPaths, "type", "id", limit = 25)
打印顯示我在原來的職位勾勒出層次,甚至包含鍵:對每個節點的值。太好了!
levelName type id
1 A colors 1
2 ¦--B blue 2
3 ¦ ¦--E dkBlue 5
4 ¦ ¦--F medBlue 6
5 ¦ °--G ltBlue 7
6 ¦--C red 3
7 ¦ ¦--H dkRed 8
8 ¦ °--I medRed 9
9 °--D green 4
再一次,我對如何將這個從樹轉換爲嵌套的JSON感到遺憾。這裏的示例https://ipub.com/data-tree-to-networkd3/與大多數示例一樣,僅在葉節點上使用鍵:值對,而不在分支節點上使用。我認爲答案是創建一個嵌套的列表來提供給JSONIO或JSONLITE,我不知道該怎麼做。
你可能想看看這個:http://stackoverflow.com/questions/12818864/how-to-write-to-json-with-children-from-r –
嗨伊恩,你舉的例子讓我接近,但我正在努力使它適應於我爲樹中每個「節點」所需的Key:Value對的點。該示例中的遞歸方法僅爲終端節點提供了鍵值對。 – Tim
蒂姆,你的問題很複雜,我需要破解一下,不幸的是我現在沒有時間。有人比我更擅長解決問題的速度。如果您在遞歸方法中遇到問題,另一個選擇是從頂部向下構建一棵樹,這個樹更容易概念化。這裏是data.tree包的參賽者:https://cran.r-project.org/web/packages/data.tree/vignettes/data.tree.html。您可以添加每個孩子,然後按名稱爲每個孩子添加屬性。然後,您可以使用以下內容將這些導出到JSON: –