Как объединить несколько фрагментов краев тидиграфа? - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть данные сети с продольной панелью, каждая точка времени в настоящий момент хранится в виде матрицы смежности в списке. Я хотел бы, чтобы все они были в одном объекте 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) 
}
...