如何通过计算数据框中的共同出现次数来创建邻接矩阵?
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")
我想在 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")