Матрица построения и смежности

Мне было интересно, можете ли вы помочь мне построить матрицу смежности. У меня есть такие данные в формате CVS:

Paper_ID    Author
2   Foster-McGregor, N.
3   Van Houte, M.
4   van de Meerendonk, A.
5   Farla, K.
6   van Houte, M.
6   Siegel, M.
8   Farla, K.
11  Farla, K.
11  Verspagen, B.

Как вы можете видеть, столбец «Paper_ID» имеет повторяющееся значение 11, что означает «Фарла, К.» и "Верспаген, Б." являются соавторами публикации. Мне нужно построить взвешенную квадратную матрицу, используя имена авторов и подсчитывая, сколько раз они работают вместе.


person Mario GS    schedule 01.12.2014    source источник


Ответы (1)


Следующее делает то, что вы ищете?

# simulate data.
d <- data.frame(
  id=c(2,3,4,5,6,6,8,11,11,12,12),
  author=c("FN", "VM","VA","FK","VM","SM","FK","FK","VB","FK","VB")
)

d
   id author
1   2     FN
2   3     VM
3   4     VA
4   5     FK
5   6     VM
6   6     SM
7   8     FK
8  11     FK
9  11     VB
10 12     FK
11 12     VB

# create incidence matrix:
m <- xtabs(~author+id,d)
m
      id
author 2 3 4 5 6 8 11 12
    FK 0 0 0 1 0 1  1  1
    FN 1 0 0 0 0 0  0  0
    SM 0 0 0 0 1 0  0  0
    VA 0 0 1 0 0 0  0  0
    VB 0 0 0 0 0 0  1  1
    VM 0 1 0 0 1 0  0  0

# convert to adjacency matrix.
# tcrossprod does "m %*% t(m)"
tcrossprod(m)
      author
author FK FN SM VA VB VM
    FK  4  0  0  0  2  0
    FN  0  1  0  0  0  0
    SM  0  0  1  0  0  1
    VA  0  0  0  1  0  0
    VB  2  0  0  0  2  0
    VM  0  0  1  0  0  2

Обратите внимание, что crossprod() даст вам матрицу инцидентности для переменной id (т.е. будет t(m) %*% m).

person ddiez    schedule 03.12.2014
comment
Спасибо, это было очень полезно. - person Mario GS; 05.12.2014
comment
Уважаемый ddiez, у меня проблемы с командой crossprod. Я запускаю набор данных, аналогичный предложенному вами: d ‹- data.frame (id = c (2,3,4,5,6,6,8,11,11,11,12,12,12), author = c (FN, VM, VA, FK, VM, SM, FK, FK, VB, VA, FK, VB, VA)) - person Mario GS; 12.12.2014
comment
В чем твоя проблема? Я ничего не знаю с теми данными, которые вы показываете. - person ddiez; 12.12.2014
comment
Кроме того, не рекомендуется редактировать свое сообщение, чтобы задать другой вопрос. Если у вас есть другой вопрос, напишите еще один пост. В противном случае ваши правки могут сделать опубликованные ответы нерелевантными / неверными. Предполагается, что изменения должны быть сделаны для улучшения, расширения или уточнения сообщений (вопросов или ответов). - person ddiez; 12.12.2014
comment
Уважаемый @ddiez, предложенные вами команды отлично работали для подсчета количества коллабораций между авторами. Проблема в том, что мне нужно взвесить матрицу в соответствии с количеством соавторов в каждой статье. Я перефразирую свой вопрос, не могли бы вы взглянуть еще раз? - person Mario GS; 12.12.2014
comment
Как я уже говорил, вы полностью изменили исходный вопрос. Этот сайт работает не так. Пожалуйста, загляните в справочный центр, чтобы узнать, как правильно задать вопрос. Я предлагаю вам отменить свои правки и задать новый вопрос в новом сообщении. - person ddiez; 12.12.2014
comment
Уважаемый @ddiez, извините, но у меня нет резервной копии моего исходного вопроса, возможно, вы можете мне помочь на этот раз или, может быть, вместо этого измените заголовок вопроса? - person Mario GS; 15.12.2014
comment
Да, у вас есть резервная копия. Нажмите на отредактированный 12 декабря в 11:33 рядом со своим значком в вопросе и посмотрите, сможете ли вы вернуться к предыдущей версии оттуда. Если вы можете отменить его, опубликуйте новый вопрос с вашей текущей проблемой (вы также можете связать этот пост вместо того, чтобы повторять все в начале). - person ddiez; 16.12.2014
comment
Уважаемый @ddiez, я уже откатил изменения и разместил новый вопрос, как вы просили. Это ссылка stackoverflow.com/questions/27504466/. Надеюсь, ты сможешь мне помочь. - person Mario GS; 16.12.2014