将边缘列表转换为双模式网络矩阵
converting edgelist to two-mode network matrix
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
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