Как вычислить все пары членов для анализа сети? - PullRequest
0 голосов
/ 30 января 2020

У меня есть данные об исполнителях, которые выступают на джазовых альбомах и хотели бы создать карты этих людей. Пример данных приведен ниже. Мне нужно вычислить все возможные пары исполнителей для данного альбома. Чтобы проиллюстрировать желаемый результат, на рисунке ниже показаны исходные данные (левая сторона) и то, как необходимо добавить дополнительные строки, чтобы получить уникальный набор всех возможных пар внутри альбома. Дополнительная информация о роли должна быть сохранена. В показанном примере изначально есть три записи для трех альбомов. У реструктурированных данных будет 31 запись и одинаковые столбцы.

Запись здесь выглядит аналогично, но имеет дело с данными в другой структуре.

restructuredForSNA

jnet<-structure(list(leadArtist = c("Milt Jackson", "Milt Jackson", 
"Milt Jackson", "Milt Jackson", "Milt Jackson", "Milt Jackson", 
"Milt Jackson", "Milt Jackson", "Milt Jackson", "Milt Jackson", 
"Milt Jackson", "Milt Jackson"), albumid = c(2460190, 2460190, 
2460190, 2460190, 444693, 444693, 444693, 3019083, 3019083, 3019083, 
3019083, 3019083), extraArtists = c("Sahib Shihab", "Art Blakey", 
"Horace Silver", "Joe Newman", "Steve Novosel", "Vinnie Johnson", 
"Johnny O'Neal", "Percy Heath", "Lawrence Marable", "Skeeter Best", 
"John Lewis (2)", "Lucky Thompson"), role = c("Baritone Saxophone", 
"Drums", "Piano", "Trumpet", "Bass", "Drums", "Piano", "Bass", 
"Drums", "Guitar", "Piano", "Tenor Saxophone")), row.names = c(NA, 
-12L), class = c("tbl_df", "tbl", "data.frame"))

1 Ответ

1 голос
/ 30 января 2020

Вот как минимум один способ.

Pairs = matrix("", nrow=0, ncol=2)
for(AID in unique(jnet$albumid)) {
    Selector = jnet$albumid == AID
    Artists = unique(c(jnet$leadArtist[Selector], 
                 jnet$extraArtists[Selector]))
    Pairs = rbind(Pairs, t(combn(Artists, 2)))
}
head(Pairs)
     [,1]           [,2]           
[1,] "Milt Jackson" "Sahib Shihab" 
[2,] "Milt Jackson" "Art Blakey"   
[3,] "Milt Jackson" "Horace Silver"
[4,] "Milt Jackson" "Joe Newman"   
[5,] "Sahib Shihab" "Art Blakey"   
[6,] "Sahib Shihab" "Horace Silver"
...