преобразование пограничного списка в двухрежимную сетевую матрицу - PullRequest
0 голосов
/ 12 сентября 2018

HAVE - это крайний список для нечетной сети с двумя режимами. Люди в actor - главные отмеченные наградами актеры; люди в supporter - это другие актеры, которые сыграли одну или несколько films в качестве вспомогательной роли. Примечание: actor включает некоторые члены supporter, но не все, поэтому я рассматриваю это как данные с двумя режимами.

index   actor   supporter   films
1       f1      f4          2
2       f1      f2          1
3       f1      f7          6
4       f1      f5          5
5       f2      f6          6
6       f2      f3          3
7       f3      f1          9
8       f3      f4          1
9       f3      f2          4

WANT - это двухрежимная матрица смежности, составленная из HAVE - имена строк представляют все идентификаторы в actor; Имена столбцов включают каждое имя в actor и supporter.

    f1  f2  f3  f4  f5  f6  f7
f1  0   1   0   2   5   0   6
f2  0   0   3   0   0   6   0
f3  9   4   0   1   0   0   0

Как мне преобразовать HAVE в WANT? Этот процесс усложняется тем фактом, что (a) каждый режим имеет идентификаторы с идентичной схемой именования и (b) асимметрия (например, светодиод f2 и f1 поддерживаются один раз, но f1 никогда привел в фильме, где поддерживается f2).

1 Ответ

0 голосов
/ 13 сентября 2018

Я думаю, вы можете просто использовать свою любимую функцию reshape r:

dat <- read.table(text ="index   actor   supporter   films
1       f1      f4          2
2       f1      f2          1
3       f1      f7          6
4       f1      f5          5
5       f2      f6          6
6       f2      f3          3
7       f3      f1          9
8       f3      f4          1
9       f3      f2          4", header=TRUE)

adj <- reshape(dat[,-1], v.names = "films", idvar = "actor", 
               timevar = "supporter", direction = "wide")
adj[is.na(adj)] <- 0
adj[,order(colnames(adj))]
#   actor films.f1 films.f2 films.f3 films.f4 films.f5 films.f6 films.f7
# 1    f1        0        1        0        2        5        0        6
# 5    f2        0        0        3        0        0        6        0
# 7    f3        9        4        0        1        0        0        0
...