我正在使用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()
函数上工作,就像Les悲惨世界数据中的那个一样吗?
答案 0 :(得分:1)
您可以直接使用simpleNetwork
:simpleNetwork(networkData)
如果您想使用forceNetwork
,帮助页面会显示Nodes
数据框是&#34;包含节点ID和节点属性的数据框。如果未指定ID,则节点的顺序必须与“链接”数据框中的“源变量”列的顺序相同。目前只允许使用分组变量。&#34;,所以看起来应该是这样......
# 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
数据框是&#34;数据框对象,其中包含节点之间的链接。它应包括每个链接的源和目标。这些应该从0开始编号。可以包含一个可选的Value变量来指定节点彼此之间的距离。&#34;,所以看起来应该是这样的......
# 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")