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;列名称包括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的电影中演出过。
答案 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