如果我的输入文件是距离矩阵,是否有任何 R 包来获取成对距离列表
例如,如果我的输入是这样的 data.frame:
A1 B1 C1 D1
A1 0 0.85 0.45 0.96
B1 0 0.85 0.56
C1 0 0.45
D1 0
我希望输出为:
A1 B1 0.85
A1 C1 0.45
A1 D1 0.96
B1 C1 0.85
B1 D1 0.56
C1 D1 0.45
我发现了一个使用“reshape”包执行相反功能的问题,但无法对其进行调整以获得我想要的。
最佳答案
其他几个选项:
D <- dist(cbind(runif(4), runif(4)), diag=TRUE, upper=TRUE) # generate dummy data
m <- as.matrix(D) # coerce dist object to a matrix
dimnames(m) <- dimnames(m) <- list(LETTERS[1:4], LETTERS[1:4])
xy <- t(combn(colnames(m), 2))
data.frame(xy, dist=m[xy])
# X1 X2 dist
# 1 A B 0.3157942
# 2 A C 0.5022090
# 3 A D 0.3139995
# 4 B C 0.1865181
# 5 B D 0.6297772
# 6 C D 0.8162084
data.frame(col=colnames(m)[col(m)], row=rownames(m)[row(m)], dist=c(m))
# col row dist
# 1 A A 0.0000000
# 2 A B 0.3157942
# 3 A C 0.5022090
# 4 A D 0.3139995
# 5 B A 0.3157942
# 6 B B 0.0000000
# 7 B C 0.1865181
# 8 B D 0.6297772
# 9 C A 0.5022090
# 10 C B 0.1865181
# 11 C C 0.0000000
# 12 C D 0.8162084
# 13 D A 0.3139995
# 14 D B 0.6297772
# 15 D C 0.8162084
# 16 D D 0.0000000
或以下,不包括任何
NA
距离,但不保留列/行名称(尽管这很容易纠正,因为我们有列/行索引):data.frame(which(!is.na(m), arr.ind=TRUE, useNames=FALSE), dist=c(m))
关于r - R中成对距离列表的距离矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27892100/