R - Создать список сетевых объектов на основе идентификатора переменной

Я новичок в сетевом анализе, поэтому заранее извиняюсь за любые несоответствия или ошибки в моем вопросе.

У меня есть список ребер, где каждое ребро представляет собой упоминание в Твиттере (от userID до userID) в рамках определенного разговора (convoID).

Тот же список ребер содержит информацию о том, к какому диалогу принадлежит любое данное ребро, а также вес этого ребра, выраженный целым числом, представляющим количество раз, когда любое ребро встречалось в одном и том же диалоге (например, пользователь 1 ответил пользователю 2 3 раза в диалоге 144; пользователь 1 ответил пользователю 2 8 раз в диалоге 12 и так далее).

Вот как выглядят данные:

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 в качестве фактора группировки, чтобы каждую сеть можно было анализировать независимо, но поскольку одно и то же преимущество может иметь место в разных разговорах (см. Пользователь2 и пользователь1, встречающиеся в разговорах 5 и 6 выше), они появляются как дубликаты.

Я хотел бы избежать создания сетевого объекта для каждого разговора из-за большого объема данных, но я не знаю, как создать сетевой объект, включая my_conversation в качестве группирующей переменной. Это вообще возможно?


person Teresa G.L.    schedule 08.03.2018    source источник
comment
У меня возникли проблемы с пониманием того, что вы подразумеваете под созданием сети для каждого разговора. Вы бы определили «сеть» как «общую сеть всех возможных комбинаций всех отдельных пользователей»? Идентификатор беседы действует как фактор группировки, да, однако я думаю, что существование сети не зависит только от экземпляра беседы.   -  person Carl Boneri    schedule 08.03.2018
comment
На самом деле, я беру это назад. Разговоры также могут представлять пересекающийся узел. [](imgur.com/IAgKuJw)   -  person Carl Boneri    schedule 09.03.2018
comment
@CarlBoneri Да, я пытаюсь создать сеть для каждой группы взаимодействий между пользователями, сгруппированных в рамках одного идентификатора. Так операционализируется разговор.   -  person Teresa G.L.    schedule 09.03.2018


Ответы (1)


До сих пор я решил это с помощью следующего кода:

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")
})

По сути, я создаю список сетевых объектов, перебирая каждый идентификатор диалога, присутствующий в исходном списке границ, и создавая один сетевой объект в каждой из этих итераций. Однако с точки зрения времени и большого количества разговоров это не самый эффективный метод.

person Teresa G.L.    schedule 09.03.2018