r - R中成对距离列表的距离矩阵

标签 r matrix distance

如果我的输入文件是距离矩阵,是否有任何 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/

    相关文章:

    java - ListView 中的物理距离

    r - 制作矩阵数字和名称顺序

    python - 删除pytorch中的零维

    arrays - 确定单个单元格中两个矩阵的最大值

    javascript - 如何查找 Google MAP javascript 上任意两个标记之间的距离

    javascript - 测量两个 HTML 元素中心之间的距离

    r - 将 dfmSparse 从 Quanteda 包转换为 R 中的数据框或数据表

    r - 根据R中的两列分配特定值

    r - 从 requirements.txt 文件安装 R 包

    r - 如何为大量变量运行 bigglm 函数