在R

时间:2018-02-25 11:08:08

标签: r datatable match igraph reshape2

我正在寻找使用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的新手,所以任何帮助都表示赞赏。

1 个答案:

答案 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)。