如何从图形对象制作数据框? (igraph)(r)

问题描述 投票:0回答:2

我有一个大的,266个顶点有向图。我想打破一些路径,这样我就可以使用构成其属性的数据在两个路径之间运行t检验或ANOVA。麻烦的是我想要使用边缘属性,特别是。我不知道如何处理这个问题。

我正在查看的每条路径都有20或21个顶点,所以我也在考虑使用重复测量测试。

我们用这个:

inst2 = c(2, 3, 4, 5, 6) 
motherinst2 = c(7, 8, 2, 10, 11) 
km = c(20, 30, 40, 25, 60)
df2 = data.frame(inst2, motherinst2)
df2 = cbind(df2, km)
g2 = graph_from_data_frame(df2)
tkplot(g2)

假设我想创建一个以5-10和8-3为数据帧的数据帧,其边缘属性(km)为值向下行。

所以它就像:

       5-10      3-8

 1       30       25

我怎样才能做到这一点?有没有办法我可以只指定我的根节点并根据它创建一个数据帧?即使它是两个独立的......然后我可以稍后再讨论。

r dataframe graph igraph edge
2个回答
0
投票

这就是你要追求的吗?

inst2 = c(2, 3, 4, 5, 6)
motherinst2 = c(7, 8, 2, 10, 11)
km = c(20, 30, 40, 25, 60)
df2 = data.frame(inst2, motherinst2)
df2 = cbind(df2, km)

require(igraph);
g2 = graph_from_data_frame(df2)

让我们从名为igraphg2对象开始。

# Store as dataframe
df <- with(as_data_frame(g2), setNames(rbind.data.frame(km), paste(from, to, sep = "-")))
df;
#  2-7 3-8 4-2 5-10 6-11
#1  20  30  40   25   60

请注意,考虑到您从dataframe开始,您也可以直接执行:

df <- with(df2, setNames(rbind.data.frame(km), paste(inst2, motherinst2, sep = "-")))

0
投票

我认为你不必事先将它转换为图形。您可以使用expand.grid获取所有可能的边缘组合以相互测试。

start <- 1
end <- 2
df3 <- df3[df3$isnt2 %in% c(start, end) | df3$motherinst2 %in% c(start, end),]
ind <- expand.grid(1:nrow(df2), 1:nrow(df2))
df3 <- data.frame(df2[ind[[1]], ], df2[ind[[2]], ])

现在,您可以将所需的开始和结束节点进行子集化以进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.