r - 获取距离矩阵单元格的标签

标签 r matrix

数据:

我有距离matrix垫子具有以下标签和值:

>mat
           179        175        176        181        249
175 147.451648                                            
176 174.527392  28.849183                                 
181 187.166092  40.007553  16.310747                      
249 194.644103  49.268129  20.637011  17.118671           
336 190.182183  44.613076  16.023090  13.697248   5.613544

问题:

我想为矩阵的最小值 (5.613544) 提取行和列标签。

预期输出类似于:
[1] 336 249

我尝试使用 colnames(mat)rownames(mat)但两者都返回 NULL .

我知道函数labels(mat)能够返回标签:
[1] "179" "175" "176" "181" "249" "336"

但在这里我被卡住了,无法理解它。它可能很简单,提前抱歉问这个简单的问题。
关于如何做到这一点的任何想法?

这里我的数据使用 dput() :
structure(c(147.451648169349, 174.527392333086, 187.166091923018, 
                194.644102830409, 190.182183344061, 28.849182654733, 40.007553207889, 
                49.2681293306533, 44.6130761331497, 16.3107466873124, 20.6370107209517, 
                16.0230895738958, 17.1186706020006, 13.6972482228087, 5.6135436361904
    ), Size = 6L, Labels = c("179", "175", "176", "181", "249", "336"
    ), Diag = FALSE, Upper = FALSE, method = "euclidean", class = "dist")

最佳答案

边距名称存储在 labels(mat) 中正如您在 dput 中看到的那样:

labels(mat)[which(lower.tri(mat),arr.ind=TRUE)[which.min(mat),]]
# [1] 336 249
  • 在距离矩阵中,两个边距相同,所以 labels用于代替 dimnames .
  • which.min给出最小值的向量位置。然而mat是一个矩阵,所以...
  • which(lower.tri(mat),arr.ind=TRUE)给出矩阵和向量位置之间的联系。


  • @DavidArenburg 的替代方案
    names(which(as.matrix(mat) == min(mat), arr.ind = TRUE)[, 1])
    
  • as.matrix(mat)采用 labels作为其 dimnames .这些名称延续到 as.matrix(mat) == min(mat)并保存在 which(...,arr.ind=TRUE) 的结果中.
  • 因为距离矩阵是对称的,有d(a,b)==d(b,a) ,我们有两个最小值(假设一个唯一的最小化点对)。我们可以通过取列位置 [,1] 来选择点对。 ,这再次捕获了 mat的原创labels ,但现在在其 names属性。
  • 关于r - 获取距离矩阵单元格的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30376553/

    相关文章:

    r - 带偏移量的泊松 GLM 的伪 R²

    r - “名称”属性的长度必须与向量的长度相同

    r - 如何在R中生成一些最有特色的颜色?

    math - 高效的4x4矩阵逆(仿射变换)

    c++ - 丢弃二维矩阵中的第一行和第一列 - 对扁平的一维 vector 重复相同的操作

    r - 更改风险表图例的字体大小

    c++ - Opencv矩阵范围L值: Is this a bug?

    python - python for循环和3D numpy矩阵加法之间的等价

    C:如何在矩阵中使用 scanf 读取多个值

    r - 获取运行时运行的所有 R 代码