Я работаю с пакетом networkD3
и не могу создать некоторые подсети с моими данными.
У меня есть набор данных, созданный таким образом (MisNodes
и MisLinks
предоставляются самим пакетом):
library(networkD3)
data("MisNodes")
head(MisNodes)
# name group size
# 1 Myriel 1 15
# 2 Napoleon 1 20
# 3 Mlle.Baptistine 1 23
# 4 Mme.Magloire 1 30
# 5 CountessdeLo 1 11
# 6 Geborand 1 9
data("MisLinks")
head(MisLinks)
# source target value
# 1 1 0 1
# 2 2 0 8
# 3 3 0 10
# 4 3 2 6
# 5 4 0 1
# 6 5 0 1
Полная сеть такова:
forceNetwork(
Links = MisLinks, Nodes = MisNodes,
Source = "source", Target = "target",
Value = "value", NodeID = "name",
Group = "group", opacity = 1)
Теперь я хотел бы выбрать одну из группы и увидеть только узлы этой группы и ссылки, которые имеют в качестве источника узлы в этой группе:
Итак, я попробовал это:
# here the group
k <-c(1)
# add id, to subset well
MisNodes$id <- rownames(MisNodes)
# select the desired nodes
nodes <- (MisNodes[MisNodes$group %in% k,])
# select the links that have as source the desired nodes
links <- (MisLinks[rownames(MisLinks) %in% nodes$id,])
# rownames from 0
rownames(nodes) <- 1:nrow(nodes)-1
# indexing from 0 to max
links$source_ <-match(links$source, sort(unique(links$source)))-1
links$target_ <-match(links$target, sort(unique(links$target)))-1
Но результат не верный, потому что одна точка должна быть связана с центральным узлом.
Просматривая ссылки:
links
source target value source_ target_
1 1 0 1 0 0
2 2 0 8 1 0
3 3 0 10 2 0
4 3 2 6 2 1
5 4 0 1 3 0
6 5 0 1 4 0
7 6 0 1 5 0
8 7 0 1 6 0
9 8 0 2 7 0
10 9 0 1 8 0
Похоже, что источники начинаются с 1, но цели от 0, но удаляя -1, это работает для первой группы, но не для других. Также общее использование k <-c(1,2,3,4,5,6,7,8,9,10)
не является правильным. Как я могу заставить сеть правильно реагировать на подмножество данных?