我正在寻找使用iGraph的定向数据集,这些数据集基于在Twitter上互相关注的人。我有一个数据表
follower_user_id | followed_user_id | gender_of_follower | gender_of_followed
1 | 2 | F | M
2 | 3 | M | M
3 | 2 | M | M
依旧......
我想评估比赛,所以在哪些情况下用户互相追随,以便我可以进一步查看谁没有被任何人跟踪,例如男人是否更多可能会比女性(等等)追随。但我不知道如何首先过滤掉比赛。
到目前为止,我认为最好的方法是对所有用户ID使用所有用户ID的矩阵,并计算每对用户ID出现的时间。
M <- table (df$follower_user_id, df$followed_user_id)
follower.followed.matrix <- M %*% t(M)
XXXXX 1 2 3
1 0 1 0
2 0 0 1
3 0 1 0
但我不确定如何合并交换组合的组合(例如2-3对配对= 2)是否可以使用'reshape2'
包融合定向网络?
我认为最好的方法是以这种方式,然后将性别数据合并到一个新的数据匹配表中,但我愿意接受如何以更有效的方式过滤这些数据的建议。我还是R的新手,所以任何帮助都表示赞赏。
答案 0 :(得分:1)
获取所需的矩阵 - 邻接矩阵 - 内置于igraph中。我将使用比您更大的示例来确保解决方案处理所有情况。
FOL = read.table(text="follower_user_id followed_user_id gender_of_follower gender_of_followed
1 2 F M
2 3 M M
3 2 M M
4 2 M M
2 4 M M
2 5 M F
4 5 M F",
header=TRUE)
## turn it into a graph and compute adjaceny
g = graph_from_edgelist(as.matrix(FOL[,1:2]))
AM = as.matrix(as_adjacency_matrix(g))
现在使用邻接矩阵,您可以快速计算A跟随B的对,B跟随A。
sapply(1:5, function(x) { AM[x,] * AM[,x] })
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 1 1 0
[3,] 0 1 0 0 0
[4,] 0 1 0 0 0
[5,] 0 0 0 0 0
你可以看到所需的对是(2,3),(2,4),(3,2)和(4,2)。