我有一个看起来像这样的tsv(长形式):
one two value
a b 30
a c 40
a d 20
b c 10
b d 05
c d 30
Run Code Online (Sandbox Code Playgroud)
我想把它变成R(或pandas)的数据帧
a b c d
a 00 30 40 20
b 30 00 10 05
c 40 10 00 30
d 20 05 30 00
Run Code Online (Sandbox Code Playgroud)
问题是,在我的tsv中我只有a,b定义而不是b,a.所以我的数据框中有很多NA.
最终目标是获得用于聚类的距离矩阵.任何帮助,将不胜感激.
igraph您在数据框中读取的解决方案,其值为边缘权重.然后,您可以将其转换为邻接矩阵
dat <- read.table(header=T, text=" one two value
a b 30
a c 40
a d 20
b c 10
b d 05
c d 30")
library(igraph)
# Make undirected so that graph matrix will be symmetric
g <- graph.data.frame(dat, directed=FALSE)
# add value as a weight attribute
get.adjacency(g, attr="value", sparse=FALSE)
# a b c d
#a 0 30 40 20
#b 30 0 10 5
#c 40 10 0 30
#d 20 5 30 0
Run Code Online (Sandbox Code Playgroud)