Как рассчитать связи для сетевого анализа на основе необработанных данных

#r #data-wrangling

Вопрос:

У меня есть некоторые данные по опубликованным работам, которые выглядят так:

 paper <- c("paper1", "paper1", "paper2", "paper3", "paper3", "paper4", "paper4", "paper5")
author <- c("author1", "author2", "author1", "author2", "author1", "author2", "author3", "author2")
df1 <- data.frame(paper, author) 
 

Как я могу перейти к этому формату для запуска сетевого анализа?

 from <- c("a1", "a2", "a2")
to <- c("a2", "a3", "a3")
weight <- c(2,0,1)
df2 <- data.frame(from, to, weight)
 

Я пробовал вмешиваться pivot_wider() и widyr::pairwise_count , но пока не добился желаемого результата.

Ответ №1:

Вот базовый вариант R —

Создайте попарную комбинацию с combn и используйте tapply , чтобы подсчитать, сколько paper s имеют в себе комбинацию

 result <- do.call(rbind, combn(unique(df1$author), 2, function(x) {
    data.frame(from = x[1], to = x[2], 
          weight = sum(tapply(df1$author, df1$paper, function(y) all(x %in% y))))
}, simplify = FALSE))

result

#     from      to weight
#1 author1 author2      2
#2 author1 author3      0
#3 author2 author3      1