我有纵向面板网络数据,当前每个时间点都存储为列表中的邻接矩阵。我想将所有这些都放在一个tbl_graph对象中(带有观察时间的标签),但是我不知道如何从tbl_graph中添加或提取整个边缘点。
我目前首先在tidygraph之外创建边列表,将它们粘合在一起,然后再通过它们,但是我怀疑还有一种更具凝聚力的解决方案。我当前的代码/示例数据如下。
数据:
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)
}