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;列名包括actor
和supporter
中的每个名称。
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的电影中引导)。
我想你可以使用你最喜欢的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