如何通过计算数据框中的共同出现次数来创建邻接矩阵?

How to create an adjacency matrix by counting number of co-appearance in a dataframe?

我想在 R 中创建一个网络。我有一个如下所示的数据框。假设 Alex 有一个苹果和一个香蕉,Brian 有两个苹果和一个桃子,而 John 有...

Alex    Apple
Alex    Banana
Alex    Kiwi
Brian   Apple
Brian   Apple
Brian   Peach
John    Kiwi
John    Peach
John    Banana
Chris   Melon
Chris   Apple
...

我想使用此数据框创建一个使用水果作为节点的无向​​网络。如果一个人有两种不同的水果,比如约翰有桃子和猕猴桃,那么节点桃子和猕猴桃之间就有一条边。边的权重是有多少人同时拥有这两种水果(节点)。

我想先创建一个邻接矩阵,但不知道该怎么做。如果您对基于此数据框创建不同的网络有更好的想法,请给我提示。

由于 OP 没有所需的输出,假设要删除重复项,这里有一个使用 data.table 中的 combn 的选项:

edges <- unique(DT)[, if (.N > 1L) transpose(combn(Fruit, 2L, simplify=FALSE)), Person][, 
    .N, .(V1, V2)]
library(igraph)
g <- graph_from_data_frame(edges)
set_edge_attr(g, "weight", value=edges$N)
plot(g)
#to check weights, use get.data.frame(g)

edges:

       V1     V2 N
1:  Apple Banana 1
2:  Apple   Kiwi 1
3: Banana   Kiwi 1
4:  Apple  Peach 1
5:   Kiwi  Peach 1
6:   Kiwi Banana 1
7:  Peach Banana 1
8:  Melon  Apple 1

数据:

library(data.table)
DT <- fread("Person Fruit
Alex    Apple
Alex    Banana
Alex    Kiwi
Brian   Apple
Brian   Apple
Brian   Peach
John    Kiwi
John    Peach
John    Banana
Chris   Melon
Chris   Apple
Andrew  Apple")