簡単にするために、次のような点のベクトルがあるとします。
x = c(1,4,5,8,9)
n
互いに等距離にある点を見つけようとしています。この場合、n=3
私の理想的な答えは次のようになります。
1,5,9
5-1=4
と9-5=4
. _
実際のベクトルは、 と同様に、はるかに大きく/複雑n
です。どうすればこれを達成できるかについてのアイデアはありますか?
前もって感謝します!
これがすべての解決策ではありませんが、1 つの始まりだと思います。まず、距離行列の計算が役立つでしょう。
> x <- c(1,4,5,8,9)
> dx <- dist(x)
> dx
1 2 3 4
2 3
3 4 1
4 7 4 3
5 8 5 4 1
次に、距離を並べ替えてランレングス エンコードすることで、同じ距離にあるポイントを特定できます。
> rdx <- rle(sort(dx))
> rdx
Run Length Encoding
lengths: int [1:6] 2 2 3 1 1 1
values : num [1:6] 1 3 4 5 7 8
必要な点のセットを選択し、関数を使用して元の距離行列のインデックスに戻すことができますorder
。距離 4 で区切られたポイントの 3 番目のグループを例にとります。
> i=3
> orderedIndex <- sum(rdx$lengths[1:(i-1)])
> order(dx)[(orderedIndex+1):(orderedIndex+rdx$lengths[i])]
[1] 2 6 9
(インデックスは上から下に数え、次に左から右に数えます)。ここ4
で、距離行列の s を識別しました。これらは、 の 1 番目/3 番目、2 番目/4 番目、および 3 番目/5 番目の点の間の距離x
です。ただし、2 番目と 4 番目のポイントを削除するには、さらに作業を行う必要があります。1 点目、3 点目、5 点目はつながっているので選ぶのでしょうか。
rle
選択したサイズを超えると関数によって識別されたすべてのポイントのグループを処理し、接続性を確認する必要があると思います。