首页 文章

R - 基于变量ID创建网络对象列表

提问于
浏览
2

我是网络分析的新手,所以我提前为我的问题中的任何不一致或错误道歉 .

我有一个边缘列表,其中每个边代表特定对话(convoID)中的Twitter提及(从userID到userID) .

相同的edgelist包含有关任何给定边所属的对话的信息,以及用整数表示的边的权重,该整数表示在同一对话中任何给定边出现的次数(例如,user1在同一对话中回复3次)会话144; user1在会话12中回复了user2 8次,依此类推) .

这就是数据的样子:

edgelist <- data.frame(my_convo = c(5, 5, 5, 5, 6, 6),
                       from = c("user2", "user3", "user4", "user5",
                       "user2", "user1"),
                       to = c("user1", "user1", "user1", "user1",
                       "user1", "user2"),
                       num_replies = c(1,1,1,1,10,8))

我想为每个对话创建一个网络,但我的数据集目前有数千个对话 . 我一直在尝试创建一个完整的网络并使用my_convo作为分组因子,以便可以独立分析每个网络,但由于相同的边缘可以在不同的对话中发生(请参阅上面的对话5和6中的user2到user1),这些看似重复 .

由于数据量很大,我想避免为每个对话创建一个网络对象,但我不知道如何创建包含my_conversation作为分组变量的网络对象 . 这有可能吗?

1 回答

  • 0

    到目前为止,我已通过以下代码解决了这个问题:

    convo_networks <- lapply(sort(unique(edgelist_weighted$my_convo)), function(i) { 
       as.network(edgelist_weighted[which(edgelist_weighted$my_convo==i),], 
       directed=T, ignore.eval=F, names.eval="num_replies", matrix.type ="edgelist")
    })
    

    本质上,我通过迭代原始边缘列表中存在的每个对话ID并在每个迭代中创建一个网络对象来创建网络对象列表 . 但是,就时间而言,如果谈话次数很多,这不是最有效的方法 .

相关问题