【发布时间】:2020-02-01 11:57:27
【问题描述】:
我有一个如下的数据框:
h = data.frame(fr = c('A','A','X','E','B','W','C','Y'),
t = c('B','E','Y','C','A','X','A','W'),
Amt = c( 40, 30, 55, 10, 33, 78, 21, 90))
我找到了所有可能的以最小顶点数开始的顶点序列 通过使用r igraph find all cycles 作为参考。 结果如下:
[[1]]
A E C A
1 3 6 1
[[2]]
A B A
1 4 1
[[3]]
X Y W X
2 7 5 2
现在我想
计算每个周期的总和
每个周期的边数
应该是这样的:
A - B - A : 40 + 33 = 73 ;边数:2
A - E - C - A : 30 + 10 + 21 = 61 ;边数:3
X - Y - W - X : 55 + 90 + 78 = 223 ;边数:3
有没有人想用 R 来计算?那将是非常感谢!
进一步编辑部分
感谢回复,我可以计算上面的两项了!! 但是,我在这里遇到了一个小问题!
我不知道我遇到了什么问题,所以我无法正确计算! 甚至我修改了很多次。
应该是这样的:
[[1]] [[2]] [[3]]
A E C A A B A X Y W X
Path sumAmt numberOfEdges
<fct> <dbl> <int>
1 "A - B - A" 73 2
2 "A - E - C - A" 61 3
3 "X - Y - W - X" 223 3
但是在我输入代码后,它无法显示第一个节点:
[[1]] [[2]] [[3]]
E C A B A Y W X
Path sumAmt numberOfEdges
<fct> <dbl> <int>
1 " - B - A" 33 2
2 " - E - C - A" 31 3
3 " - Y - W - X" 168 3
这是我寻找循环的代码。有什么我想念的吗??
h = data.frame(fr = c('A','A','X','E','B','W','C','Y'),
t = c('B','E','Y','C','A','X','A','W'),
Amt = c( 40, 30, 55, 10, 33, 78, 21, 90))
library(igraph)
g <- graph.data.frame(h, directed = TRUE)
Cycles = NULL
for(fr in V(g)) {
for(t in neighbors(g, fr, mode = "out")) {
Cycles = c(Cycles,
lapply(all_simple_paths(g, t, fr, mode = "out"), function(p)c(fr,p)))
}
}
LongCycles = Cycles[which(sapply(Cycles, length) > 1)]
LongCycles[sapply(LongCycles, min) == sapply(LongCycles, `[`, 1)]
有人有想法吗?那会很有帮助!!
【问题讨论】:
-
这和你之前的问题有什么不同吗? stackoverflow.com/questions/59997320/…
-
@RonakShah 是的,它不一样。前一个我不知道如何编写代码来查找任何循环。以stackoverflow.com/questions/55091438/… 为参考后,我已经使用代码查找循环。但我想如上所述计算每个周期的数量。这个是前一个的基础上的扩展。
标签: r sum igraph cycle calculation