如何获取与data.frame或距离矩阵中给定值匹配的单元格的行号和列号?

时间:2016-05-24 09:22:33

标签: r dataframe

当我有距离矩阵(或基于矩阵的数据框)时,如何获得与给定值对应的行和列?

示例:

df <- data.frame(x = c(11:20), y= c(12:21))
dst <- dist(df)

输出:

          1         2         3         4         5         6         7         8         9
2   1.414214                                                                                
3   2.828427  1.414214                                                                      
4   4.242641  2.828427  1.414214                                                            
5   5.656854  4.242641  2.828427  1.414214                                                  
6   7.071068  5.656854  4.242641  2.828427  1.414214                                        
7   8.485281  7.071068  5.656854  4.242641  2.828427  1.414214                              
8   9.899495  8.485281  7.071068  5.656854  4.242641  2.828427  1.414214                    
9  11.313708  9.899495  8.485281  7.071068  5.656854  4.242641  2.828427  1.414214          
10 12.727922 11.313708  9.899495  8.485281  7.071068  5.656854  4.242641  2.828427  1.414214

现在我要输入例如11.313708并得到输出(9,1)

1 个答案:

答案 0 :(得分:5)

我们转换为矩阵并使用which获取arr.ind=TRUE的索引(假设它是您想要的)。

 m1 <- as.matrix(dst)
 which(m1==val, arr.ind=TRUE)

否则,如果我们已经知道值的索引,我们可以按行,列使用常规子集。正如@nicola在评论中提到的,浮点问题有可能发生。为了避免这种情况,可以round然后进行比较。即

 which(round(m1, 3)== 11.314, arr.ind=TRUE)
 #    row col
 #9    9   1
 #10  10   2
 #1    1   9
 #2    2  10