使用R从关系表生成两方之间的关系

时间:2016-03-25 08:30:05

标签: r

我有一个包含关系列表的关系表:

Party_A     Party_B
a           b
c           a
d           b
b           e
...

您可以认为此表包含图表中(指示:方向是从Party_A到Party_B)边缘的信息。

我想要一些可以将此表转换为支持以下查询的图模型的包: 找到彼此最相似的两方,其中相似性被定义为具有最常见的输入边缘。

R中的任何包可以帮我这么做吗?谢谢。

1 个答案:

答案 0 :(得分:0)

以下是一种可以接近它的方法(使用Jaccard distance):

df <- read.table(header=T, text="source     target
a           b
c           b
a           e
c           e
f           g
h           i
a           i
c           i")
library(igraph)
g <- graph_from_data_frame(df)
m <- t(as_adjacency_matrix(g, sparse = F))
d <- dist(m[rowSums(m)>0, ], method = "binary")

dm <- as.matrix(d); dm[upper.tri(dm, T)] <- NA
idx <- which(dm == min(dm, na.rm=T), T)
cbind(rownames(dm)[idx[, "row"]], colnames(dm)[idx[, "col"]])
#      [,1] [,2]
# [1,] "e"  "b" 

可视化树形图中的距离:

hc <- hclust(d)
plot(hc)

enter image description here

根据需要调整距离测量。