2017-05-29 9 views
1

数値の列を持つデータフレームが与えられた場合、関連する数値の絶対距離が固定されるようなインデックスペアの行列を決定する簡単な方法は何ですか?Rは一定の距離離れたインデックスのすべてのペアを計算する関数

例:一定の距離が

index x 
    1 5 
    2 7 
    3 8 
    4 9 
    5 9.5 

と一定の距離が1の場合、出力は

index1 index2 
    2  3 
    3  4 

なければならない、と

index1 index2 
    1  2 

ある場合2.

+1

固定距離が2の場合は、 'index = 2/index = 4'のペアが必要ですか? –

+0

あなたの例のように、xの値はソートされていますか? – G5W

答えて

1

オプションはあなたはx列の差に基づいてそれ自体にdfをマージsqldf

​​

別のオプションは、この記事compute all pairwise differences within a vector in Rのようですが、それはあなたが望む形式でそれを得るためにはもう少し作業が必要です:私はlower.tri行列を乗算する必要があるので、あなたは違いが0ある値を望んでいた場合

dist_mat <- as.matrix(dist(df[,2])) 
dist_mat2 <- dist_mat*lower.tri(dist_mat) 
res <- data.frame(index1=rep(row.names(dist_mat2),ncol(dist_mat2)), 
       index2=rep(colnames(dist_mat2),each=nrow(dist_mat2)), 
       x=c(dist_mat2)) 

res[res$x== 1, c("index1","index2")] 

注これは問題となる可能性繰り返される組み合わせはありません(例: 2/3および3/2)。しかし、この利点は、一度だけ行う必要があることです。したがって、差異が2の場合は、最後の行をres$x==2に変更することができます。

関連する問題