Преобразование вашего фрейма данных в график.Используйте get_diameter
, чтобы получить индексы вершин самого длинного пути.Используйте индексы для упорядочения исходных данных.
library(igraph)
g <- graph_from_data_frame(df)
df[head(get_diameter(g), -1), ]
# start_id end_id
# 4 120 130
# 1 130 150
# 3 150 100
# 2 100 180
Или используйте простой цикл:
# create a vector of row indices
# get the first start ID, pre-allocate the remaining indices with NA
ix <- c(which(!df$start_id %in% df$end_id), rep(NA, nrow(df) - 1))
# for each row, check if end ID in one row matches start ID in the next row
for(i in 2:nrow(df)){
ix[i] <- match(df$end_id[ix[i - 1]], df$start_id)
}
# reorder data
df[ix, ]
get_diameter(g)
# + 5/5 vertices, named, from 8e3b983:
# [1] 120 130 150 100 180
plot(g)