100行の行列があります。最初の行に最も類似している10行のサブセットを取得する方法はありますか?
res2 <- matrix(rexp(200, rate=.1), ncol=10, nrow=100)
set1 <- subset(res2, res2 >condition1)
set1[with(set1, order(condition)), ]
set2 <- head(set1,10)
100行の行列があります。最初の行に最も類似している10行のサブセットを取得する方法はありますか?
res2 <- matrix(rexp(200, rate=.1), ncol=10, nrow=100)
set1 <- subset(res2, res2 >condition1)
set1[with(set1, order(condition)), ]
set2 <- head(set1,10)
多分:
データの生成:
set.seed(101)
res2 <- matrix(rexp(200, rate=.1), ncol=10, nrow=100)
距離行列を計算します。すべてのペアワイズ距離を計算しているため、これは非常に非効率的ですが、効率的にコーディングされており、使いやすく、距離メトリックの選択肢がたくさんあります(を参照?dist
してくださいmethod
)。このサイズの問題の場合、それは非常に迅速です。
dd <- dist(res2)
rr <- rank(as.matrix(dd)[1,])
最初の行の最初の要素のランク(行1とそれ自体の間の距離)が1であり、その値(as.matrix(dd)[1,1]
)がゼロであることがわかります。したがって、今必要なのは、次の10個の最小距離の行だけです...
res2[rr>1 & rr<=11,]