Найти все существующие циклы по данным в R - PullRequest
0 голосов
/ 31 января 2020

У меня есть фрейм данных, как показано ниже:

h = data.frame(fr = c('A','A','X','E','B','W','C','Y'),
               t  = c('B','E','Y','C','A','X','A','W'))

Я хотел бы найти все петли из фрейма данных, которые могут их показать.

A - B - A

A - E - C - A

X - Y - W - X

Как я могу использовать код в R для решения проблемы? У кого-нибудь есть идеи? Это было бы здорово! !!

1 Ответ

2 голосов
/ 31 января 2020

Вот еще один вариант:

library(igraph)
g <- graph_from_data_frame(h)

#https://lists.nongnu.org/archive/html/igraph-help/2009-04/msg00125.html
find.cycles <- function(graph, k) {
    ring <- graph.ring(k, TRUE)
    subgraph_isomorphisms(ring, graph)
}

#find all cycles
N <- length(unique(unlist(h)))
l <- unlist(lapply(1L:N, find.cycles, graph=g), recursive=FALSE)

#extract the vertices in each cycle
Filter(Negate(is.null), lapply(l, function(e) {
    if (length(e) > 1L) {
        nm <- names(e)
        c(nm, nm[1L])
    }
}))

вывод:

[[1]]
[1] "A" "B" "A"

[[2]]
[1] "B" "A" "B"

[[3]]
[1] "A" "E" "C" "A"

[[4]]
[1] "X" "Y" "W" "X"

[[5]]
[1] "E" "C" "A" "E"

[[6]]
[1] "W" "X" "Y" "W"

[[7]]
[1] "C" "A" "E" "C"

[[8]]
[1] "Y" "W" "X" "Y"

Ссылка:

Re: [igraph] Помощь - найти циклы Габор Чарди

...