在邻接数据框中转换事件列表数据框
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)
我有一个 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)