假设下面的数据框是一个边缘列表(inst2 和 Motherinst2 之间的关系),并且该 km 是我想要计算为分配给边缘的路径的属性。我对编码太陌生,无法制作可重复的边缘列表。
inst2 = c(2, 3, 4, 5, 6)
motherinst2 = c(7, 8, 9, 10, 11)
km = c(20, 30, 40, 25, 60)
df2 = data.frame(inst2, motherinst2)
edgelist = cbind(df2, km)
g = graph_from_data_frame(edgelist)
我知道如何计算图中顶点的路径长度,但我有一些属性附加到我想总结为路径长度的边上。它们是简单的属性(距离以公里计,时间以天计,速度以公里/天计)。
这就是我计算顶点路径(在根和终端/叶子之间)的方式:
roots = which(sapply(sapply(V(g),
function(x) neighbors(g, x, mode = 'in')), length) == 0)
#slight tweaking this piece of code will also calculate 'terminal' nodes (or leaves). (11):
terminals = which(sapply(sapply(V(g),
function(x) neighbors(g, x, mode = 'out')), length) == 0)
paths= lapply(roots, function(x) get.all.shortest.paths(g, from = x, to = terminals, mode = "out")$res)
named_paths= lapply(unlist(paths, recursive=FALSE), function(x) V(g)[x])
我只想基本上完全按照我上面所做的那样做,但是总结每条路径之间发生的距离、时间和速率(我将计算其平均值)。如果它有助于了解边缘是如何作为属性添加的,我已经像这样使用 cbind 了:
edgelist_df = cbind(edgelist_df, time, dist, speed)
我的图形对象(g)是这样设置的:
g <- graph_from_data_frame(edgelist_df, vertices = vattrib_df)
vattrib_df 是顶点的属性,这里我们不感兴趣。