【发布时间】:2017-12-28 10:59:21
【问题描述】:
我知道有很多关于生成边缘列表的未解决和已回答的问题,但我发现没有一个适合我的情况:
我有一个表示严格分层网络的表,我想将其转换为具有 3 列的表:源节点、目标节点和交互类型。该表相当冗余,第一列列出了所有第一级节点,第二列是所有对应的第二级节点,依此类推:
first second third
1 A F L
2 B F L
3 C G L
4 D F L
5 E G L
6 L L L
我想要的表格是这样的:
source target level
1 F L third
2 G L third
3 L L third
4 A F second
5 B F second
6 C G second
7 D F second
8 E G second
9 L L second
到目前为止,我只需要在很少的关卡中做一次,所以我对 dplyr 使用了以下笨拙的方法:
library(dplyr)
example.df <- data.frame(
"first" = c("A", "B", "C", "D", "E", "L"),
"second" = c("F", "F", "G", "F", "G", "L"),
"third" = c("L", "L", "L", "L", "L", "L")
)
name.v <- c("source","target")
third.df <- example.df %>%
group_by(second) %>%
summarise(third = unique(third))
names(third.df) <- name.v
second.df <- example.df %>%
group_by(first) %>%
summarise(second = unique(second))
names(second.df) <- name.v
hier.df <- bind_rows("third" = third.df, "second"= second.df, .id = "level") %>%
select(source, target, level)
# using igraph to generate the image
library(igraph)
hier.graph <- graph_from_data_frame(hier.df)
plot(hier.graph)
显然,这将非常糟糕。因此,对于编程,我更愿意找到一种更精益的方法,例如在基础 R 中。
【问题讨论】:
-
您实际上是想要中间表,还是只是想要一种简单的方法将其转换为 igraph 对象。如果第二个this可以帮忙
-
我想要这张桌子。我只是用 igraph 来说明。我将编辑我的问题