サンプルデータを作成します。各行で、データは、長く広くない作るという親子ペア -
> d <- data.frame(list("c" = c("a", "b", "c", "d", "e", "f"), "p1" = c(NA, NA, "a", "b", "b", "d"), "p2" = c(NA, NA, NA, "c", "c", "e")),stringsAsFactors=FALSE)
まずアップ、それをきちんと:
私はあなたのデータは文字ではなく要因であると仮定しています、ここで
stringsAsFactors
の使用を注意してください
> pairs = subset(reshape2::melt(d,id.vars="c",value.name="parent"), !is.na(parent))[,c("c","parent")]
> pairs
c parent
3 c a
4 d b
5 e b
6 f d
10 d c
11 e c
12 f e
ここで、親子関係のグラフを作成できます。だから... ...私は正確に何をしたいかわからない今
> g = graph.data.frame(pairs)
> plot(g)
が、igraph
機能は何もすることができます。これは、矢印のようにプロットので、親子、監督グラフです。
> d_search = bfs(g,"d",neimode="out", unreachable=FALSE, order=TRUE, dist=TRUE)
まず、ノードはの祖先です:例えば、ここで私たちは情報の様々なビットを得ることができ、そこからd
から始まるグラフの検索です?徹底的経由d
から到達することができ、そのもの(ここでは、幅優先)検索:それは同様d
を含ん
> d_search$order
+ 6/6 vertices, named:
[1] d c b a <NA> <NA>
注意。このリストから抜け出すには些細なことだ。それはあなたが尋ねたものであるd
の先祖のセットを与えます。
これらのノードの関係はd
とは何ですか?
> d_search$dist
c d e f a b
1 0 NaN NaN 2 1
我々はe
とf
が到達不能であることがわかり、そのd
の祖先ではありません。c
とb
は親であり、a
は祖父母です。これはグラフから確認できます。
shortest_paths
などの機能を使用して、子から上へのすべてのパスを取得することもできます。
データでコードを与えておけば助けになる - http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Bulat
@Bulat、私はコード。そのイメージファイルがデータです。 – Artiga
再現可能なデータの例は、 'd < - data.frame(list" "c" = c( "a"、 "b"、 "c"、 "d"、 "e"、 "f")、 "p2" = c(NA、NA、NA、 "c"、 "c"、 "e") "p1" = c(NA、NA、 "a"、 "b"、 "b" ")))' – Bulat