2017-01-23 65 views
-1

我有以下數據結構...打開一個長的數據結構,以廣泛的矩陣結構

 ID value 

1 1  1 
2 1  63 
3 1  2 
4 1  58 
5 2  3 
6 2  4 
7 3  34 
8 3  25 

現在我想將它變成了一種二元的數據結構。每個具有相同價值的ID都應該有關係。

我試了幾個選項,:

df_wide <- dcast(df, ID ~ value) 

...把​​我帶到一個很長的路在路上...

ID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 
1  1001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
2  1006 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
3  1007 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 
4  1011 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
5  1018 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
6  1020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 
7  1030 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 
8  1036 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

現在是我把它變成一個適當的主要問題矩陣從中得到一個igraph對象。

df_wide_matrix <- data.matrix(df_wide) 

df_aus_wide_g <- graph.edgelist(df_wide_matrix ,directed = TRUE) 

不要誤會我的那裏...

我也試圖把它改造成一個鄰接矩陣...

df_wide_matrix <- get.adjacency(graph.edgelist(as.matrix(df_wide), directed=FALSE)) 

...但它也不能工作

回答

1

如果您想在所有具有相同值的ID之間創建邊緣,請嘗試使用類似的方法。首先mergevalue本身的數據幀。然後,刪除value列,並刪除所有(無向)邊緣重複或只是點。最後,轉換爲兩列矩陣並創建邊。

res <- merge(df, df, by='value', all=FALSE)[,c('ID.x','ID.y')] 
res <- res[res$ID.x<res$ID.y,] 
resg <- graph.edgelist(as.matrix(res)) 
+0

啊好主意..謝謝! –