将Edgelist转换为两模网络矩阵

时间:2018-09-11 23:21:45

标签: r igraph data-manipulation adjacency-matrix sna

HAVE是奇数双模网络的边缘列表。 actor中的人是主要的获奖演员; supporter中的人员是在一个或多个films中担任辅助角色的其他演员。注意:actor包含supporter some 个成员,但不是全部,这就是为什么我将其视为双模式数据。

index   actor   supporter   films
1       f1      f4          2
2       f1      f2          1
3       f1      f7          6
4       f1      f5          5
5       f2      f6          6
6       f2      f3          3
7       f3      f1          9
8       f3      f4          1
9       f3      f2          4

WANT是由HAVE组成的两模式邻接矩阵-行名表示actor中的所有ID;列名称包括actorsupporter中的每个名称。

    f1  f2  f3  f4  f5  f6  f7
f1  0   1   0   2   5   0   6
f2  0   0   3   0   0   6   0
f3  9   4   0   1   0   0   0

如何将HAVE转换为WANT?由于每个模式(a)的ID具有相同的命名方案和(b)不对称(例如,一次支持f2 led和f1,但f1从未在支持f2的电影中演出过。

1 个答案:

答案 0 :(得分:1)

我认为您可以使用自己喜欢的reshape r函数:

dat <- read.table(text ="index   actor   supporter   films
1       f1      f4          2
2       f1      f2          1
3       f1      f7          6
4       f1      f5          5
5       f2      f6          6
6       f2      f3          3
7       f3      f1          9
8       f3      f4          1
9       f3      f2          4", header=TRUE)

adj <- reshape(dat[,-1], v.names = "films", idvar = "actor", 
               timevar = "supporter", direction = "wide")
adj[is.na(adj)] <- 0
adj[,order(colnames(adj))]
#   actor films.f1 films.f2 films.f3 films.f4 films.f5 films.f6 films.f7
# 1    f1        0        1        0        2        5        0        6
# 5    f2        0        0        3        0        0        6        0
# 7    f3        9        4        0        1        0        0        0