におけるデータフレームのようなグラフ内のノード間の最小距離/レベルを見つける:Iのようないくつかのノード間の遷移について説明data.tableに格納されているいくつかのグラフデータ持っR
lfs = data.table(from = c(NA, 'x', 'x', 'y'), to = c('x', 'y', 'p', 'z'), level = 0)
lfs
# from to level
#: NA x 0
#: x y 0
#: x p 0
#: y z 0
をIを検索します開始ノードからの各ノードの距離NA
。次のように期待される結果は次のとおりです。
# from to level
#: NA x 1
#: x y 2
#: x p 2
#: y z 3
次のように私は非常に面倒な方法でこの問題を解決することができます:
lfs[ is.na(lfs$from) ]$level = 1
target = lfs$from %in% (lfs[ lfs$level == 1 ]$to)
lfs[target]$level = 2
target = lfs$from %in% (lfs[ lfs$level == 2 ]$to)
lfs[target]$level = 3
私はおそらく、グラフの操作を使用して簡単に、より汎用的な解決策があるはずと思いますigraphのようなグラフライブラリでは機能しますが、私はそれらをよく知りませんし、これらのライブラリで何を検索するのか分かりません。
グラフアルゴリズムを使用して期待される出力を得るにはどうすればよいですか、他の簡単な解決策はありますか?我々はfrom
の各一意の値が既に("start"
除く)列to
の前の行に存在すると仮定した場合
から
rleid
を使用することができますありがとう、確かにこれは問題を解決します。コメントの代わりに答えとして書くのはなぜですか?だから、誰もがすぐにそれを見ることができるでしょう。 –