Преобразовать фрейм данных списка событий в фрейм данных смежности - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть df, в котором каждый столбец представляет событие, а в ячейках есть индивидуумы, например:

df=data.frame(topic1=c("a", "b","c", "d"), topic2=c("e","f", "g", "a"), topic3=c("b","c","g","h"))

Мне нужно преобразовать его в смежность df, например:

        topic1 topic2   topic3
   a    1      1        0
   b    1      0        1
   c    1      0        1
   d    1      0        0
   e    0      1        0
   f    0      1        0
   g    0      1        1
   h    0      0        1

THX!

1 Ответ

1 голос
/ 10 ноября 2019

Форма levs, содержащая уровни в отсортированном порядке, а затем для каждого столбца df определите, какие в нем левы. Это дает логическую матрицу, которую мы можем преобразовать в числовое значение, используя +.

levs <- sort(unique(unlist(df)))   # a b c d e f g h
+ sapply(df, function(x) levs %in% x)

, что дает:

     topic1 topic2 topic3
[1,]      1      1      0
[2,]      1      0      1
[3,]      1      0      1
[4,]      1      0      0
[5,]      0      1      0
[6,]      0      1      0
[7,]      0      1      1
[8,]      0      0      1

Последняя строка может быть записана еще более компактно, как:

+ sapply(df, `%in%`, x = levs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...