У меня есть фрейм данных, как показано ниже:
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 найти все циклы в качестве ссылки. И результат, как показано ниже:
[[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)]
У кого-нибудь есть идеи? Это было бы полезно !!