将边缘列表转换为双模网络矩阵

问题描述 投票:1回答:1

HAVE是奇数双模网络的边缘列表。 actor的人是获奖的主要演员;在supporter的人是其他演员,他们在一个或多个films中担任配角。注意:actor包括supporter的一些成员但不是全部,这就是我将其视为双模数据的原因。

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的电影中引导)。

r igraph data-manipulation adjacency-matrix sna
1个回答
1
投票

我想你可以使用你最喜欢的reshaper功能:

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
© www.soinside.com 2019 - 2024. All rights reserved.