2017-01-23 66 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

啊好主意..谢谢! –