我有这样的数据
column-1 Column-2 Similarity_dist
chemical-1 chemical-2 0.6
chemical-1 chemical-3 0.1
chemical-1 chemical-4 0.7
chemical-1 chemical-5 0.3
chemical-2 chemical-1 0.05
chemical-2 chemical-3 0.65
chemical-2 chemical-4 0.75
chemical-2 chemical-5 0.4
。 。这样的16000行。现在我用相似截止值0.5来过滤它们,我的数据看起来像
column-1 Column-2 Similarity_dist
chemical-1 chemical-2 0.6
chemical-1 chemical-4 0.7
chemical-2 chemical-3 0.65
chemical-2 chemical-4 0.75
。
我想找到这些化学品之间的互动网络。有没有人知道R中的方法,我可以使用化学品作为节点和距离作为边缘,然后形成网络?还有其他建议吗?任何代码?
答案 0 :(得分:2)
igraph
软件包提供了简化工具的工具。我认为你的意思是这些是化学品之间的无向联系。如果没有,请删除下面的directed=FALSE
部分。
## Data
Chems = read.table(text="Column-1 Column-2 Similarity_dist
chemical-1 chemical-2 0.6
chemical-1 chemical-4 0.7
chemical-2 chemical-3 0.65
chemical-2 chemical-4 0.75",
header=TRUE, stringsAsFactors=FALSE)
现在我们有了您的数据,我们可以将其直接转换为网络。
library(igraph)
ChemGraph = graph_from_data_frame(Chems, directed=FALSE)
plot(ChemGraph)
权重存储为边的属性(类型E(ChemGraph)$Similarity_dist
),可用作标签或更改链接的外观。
如果有许多节点并且您只想查看子集的连接性,您可以这样:
## List the nodes you want
Wanted = c("chemical-1", "chemical-2", "chemical-4")
## Create the graph containing only wanted nodes
WantedGraph = induced_subgraph(ChemGraph, Wanted)
plot(WantedGraph)