У меня есть данные сети с продольной панелью, каждая точка времени в настоящий момент хранится в виде матрицы смежности в списке. Я хотел бы, чтобы все они были в одном объекте tbl_graph (с тегами времени наблюдения), но я не знаю, как добавлять или извлекать полные грани из таблицы tbl_graph.
В настоящее время я создаю краевые списки за пределами тидиграфа, склеиваю их вместе, а затем пропускаю, но я подозреваю, что есть более сплоченное решение. Мой текущий код / пример данных ниже.
Данные:
nets <- list()
for (i in 1:3){
nets[[i]] <- matrix(sample(c(0,1), 9, replace = T), 3,3)
}
Текущее решение:
for (i in 1:length(nets)){
ones <- !nets[[i]] %in% 0
edges <- data.frame(matrix(0, sum(ones), 4))
edges[, 1] <- row(nets[[i]])[ones]
edges[, 2] <- col(nets[[i]])[ones]
edges[, 3] <- nets[[i]][ones]
edges[, 4] <- i
nets[[i]] <- edges
}
edges <- do.call(rbind, nets)
colnames(edges) <- c("from", "to", "weight", "time")
nodes <- data.frame(c("1", "2", "3"))
colnames(nodes) <- "name"
mynet <- tbl_graph(nodes= nodes, edges = edges)
Я бы предпочел решить эту проблему прямо из списка, созданного ниже:
for (i in 1:length(nets)){
tidy.nets[[i]] <- nets[[i]] %>%
as_tbl_graph() %>%
activate(edges) %>%
mutate(time = i)
}