R-o*_*ert 5 r data-conversion edges igraph
我需要在R中进行简单的数据转换,以便与igraph一起使用.我的数据框采用这种格式,按以下方式分组GROUP:
A GROUP
1 1 a
2 2 a
3 3 a
4 4 a
5 1 b
6 3 b
7 5 b
Run Code Online (Sandbox Code Playgroud)
el此格式的无向边缘列表? A B
1 1 2
2 1 3
3 1 4
4 2 3
5 2 4
6 3 4
7 1 3
8 1 5
9 3 5
Run Code Online (Sandbox Code Playgroud)
注意:没有自我引用1-1,2-2,3-3,...
el? A B weight
1 1 2 1
2 1 3 2
3 1 4 1
4 2 3 1
5 2 4 1
6 3 4 1
7 1 5 1
8 3 5 1
Run Code Online (Sandbox Code Playgroud)
这是一种获取边缘列表的方法plyr:
foo <- data.frame(
A = c(1,2,3,4,1,3,5),
GROUP = c("a","a","a","a","b","b","b"))
library("plyr")
E1 <- do.call(rbind,dlply(foo,.(GROUP),function(x)t(combn(x$A,2))))
E1
Run Code Online (Sandbox Code Playgroud)
返回:
[,1] [,2]
[1,] 1 2
[2,] 1 3
[3,] 1 4
[4,] 2 3
[5,] 2 4
[6,] 3 4
[7,] 1 3
[8,] 1 5
[9,] 3 5
Run Code Online (Sandbox Code Playgroud)
然后获取权重(这里我使用将combn最小的数字放在第一位):
W <- apply(E1,1,function(x)sum(E1[,1]==x[1]&E1[,2]==x[2]))
E2 <- cbind(E1,weight=W)
E2 <- E2[!duplicated(E2),]
E2
Run Code Online (Sandbox Code Playgroud)
返回:
weight
[1,] 1 2 1
[2,] 1 3 2
[3,] 1 4 1
[4,] 2 3 1
[5,] 2 4 1
[6,] 3 4 1
[7,] 1 5 1
[8,] 3 5 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |