我是网络分析的新手,所以我提前为我的问题中的任何不一致或错误道歉。
我有一个边缘列表,其中每个边代表特定对话(convoID)中的Twitter提及(从userID到userID)。
相同的edgelist包含有关任何给定边所属的对话的信息,以及用整数表示的边的权重,该整数表示在同一对话中 内的任何给定边的次数(例如,user1在会话144中回复了user2 3次; 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作为分组变量的网络对象。这甚至可能吗?
答案 0 :(得分: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并在每个迭代中创建一个网络对象来创建网络对象列表。但是,就时间而言,如果谈话次数很多,这不是最有效的方法。