2016-05-24 12 views
3

距離行列(または行列に基づくデータフレーム)がある場合、与えられた値に対応する行と列を取得するにはどうすればよいですか?data.frameまたはdistance行列の与えられた値に一致するセルの行番号と列番号を取得する方法は?

例:

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)

+0

浮動小数点値を比較するとき、この点に注意してください。私はポイントの問題を浮動について警告したいhttp://stackoverflow.com/questions/9508518/why-are-these-numbers-not-equal – nicola

答えて

5

whichでインデックスを取得して、それをarr.ind=TRUEとする(望むものと仮定して)。

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

我々はすでに値のインデックスを知っていればそうでなければ、我々は、行、列によって定期的サブセットを使用することができます。コメントに記載されている@ニコラのように、浮動小数点問題の可能性があります。それを回避するにはroundとそれを比較してください。すなわち

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

。たとえば、 'which(m1 == 11.313708、arr.ind = TRUE)'は結果を生成せず、これを認識しているかどうかわかりません。 – nicola

+0

これで私は '行col'を得ます – Azrael

+0

@Azrael更新を確認してください – akrun

関連する問題