我正在使用networkD3
包,我正在尝试进行一些网络分析
假设我有这些数据:
src <- c("Dizzy Gillespie","Louis Armstrong","Max Roach","Charlie Parker","Charlie Parker")
target <- c("Chet Baker","Chet Baker","Peter Erskine","John Coltrane","Wayne Shorter")
group <- c("Trumpet","Trumpet","Drums","Saxophone","Saxophone")
networkData <- data.frame(src, target,group)
我已经 https://christophergandrud.github.io/networkD3/阅读了此文档,但他们不会告诉他们如何操纵MisLinks
上的数据,MisNodes
创建其他列......我如何操作我的数据框,以便它可以像在《悲惨世界》数据上那样在forceNetwork()
函数上工作?
你可以像这样直接使用simpleNetwork
:simpleNetwork(networkData)
如果要使用forceNetwork
,帮助页面说Nodes
数据框是"包含节点 ID 和节点属性的数据框。如果未指定 ID,则节点的顺序必须与链接数据框中的源变量列的顺序相同。目前只允许分组变量。
# names group
# 1 Dizzy Gillespie Trumpet
# 2 Louis Armstrong Trumpet
# 3 Max Roach Drums
# 4 Charlie Parker Saxophone
# 5 Chet Baker Trumpet
# 6 Peter Erskine Drums
# 7 John Coltrane Saxophone
# 8 Wayne Shorter Saxophone
您可以从networkData
数据框中创建,如下所示...
col_names <- c("name", "group")
nodes <- rbind(setNames(networkData[c(1, 3)], col_names),
setNames(networkData[c(2, 3)], col_names))
nodes <- unique(nodes)
帮助页面说Links
数据框是"具有节点之间链接的数据框对象。它应包括每个链接的源和目标。它们应从 0 开始编号。可以包含一个可选的 Value 变量来指定节点之间的距离。
# src target
# 1 0 4
# 2 1 4
# 3 2 5
# 4 3 6
# 5 3 7
然后,您可以使用networkData
数据框和上面创建的nodes
数据框创建,如下所示...
networkData$src <- match(networkData$src, nodes$name) - 1
networkData$target <- match(networkData$target, nodes$name) - 1
networkData$group <- NULL
然后将它们传递给forceNetwork
并告诉它数据框中列的名称,如下所示......
forceNetwork(Links = networkData, Nodes = nodes, Source = "src",
Target = "target", NodeID = "name", Group = "group")