2017-02-09 13 views
1

私は、次のネットワークがあります。理想的には私が唯一のigraph ego()リストを意味のあるデータフレームに変換するにはどうすればよいですか?

3 2 1 a 
4 b NA NA 

になるだろう

1 a NA NA 
2 1 a NA 
3 2 1 a 
4 b NA NA 

edges <- data.frame(from=c('a','1','2','b'), to=c('1','2','3','4')) 
edges 
    from to 
1 a 1 
2 1 2 
3 2 3 
4 b 4 

をそして、以下のように "へ" のノードの近傍を特定したいです私は 'a'から '3'へと '4'から 'b'へのフルパスを得ることにのみ関心があるからです。 IGRAPHパッケージから自我()関数を使用して

私はこの情報のリストを取得するが、私は上記のフォームでのデータフレームに変換するために管理していない。ここで

test <- ego(graph,4,edges[,2], "in") 
test 
[[1]] 
+ 1/6 vertex, named: 
[1] a 

[[2]] 
+ 2/6 vertices, named: 
[1] 1 a 

[[3]] 
+ 3/6 vertices, named: 
[1] 2 1 a 

[[4]] 
+ 1/6 vertex, named: 
[1] b 

は私の失敗した試験です。

require(plyr) 
> data.frame(ldply(test, rbind)) 
    a X1 X2 b 
1 1 NA NA NA 
2 1 2 NA NA 
3 1 2 3 NA 
4 NA NA NA 4 

data.frame(t(unlist(test))) 
a X1 a.1 X2 X1.1 a.2 b 
1 1 2 1 3 2 1 4 

答えて

0

[OK]を、私はそれを行う方法を見つけましたが、それが最も効率的かどうかはわかりません。

neighbors <- lapply(1:length(test), function(x) names(test[[x]])) 
require(plyr) 
data.frame(edges$to,ldply(neighbors, rbind)) 
    edges.to X1 X2 X3 
1  1 a <NA> <NA> 
2  2 1 a <NA> 
3  3 2 1 a 
4  4 b <NA> <NA> 
1

我々はあまりにもrbind.fillを使用することができます。

library(plyr) 
rbind.fill(lapply(test, function(x)as.data.frame(t(names(x))))) 
# V1 V2 V3 
#1 a <NA> <NA> 
#2 1 a <NA> 
#3 2 1 a 
#4 b <NA> <NA> 
関連する問題