在邻接数据框中转换事件列表数据框

Transform event list dataframe in adjacency dataframe

我有一个 df,其中每一列代表一个事件,单元格中有个人,如下所示:

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

我需要在adjacency 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

谢谢!

表单 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)