2012-08-04 4 views
0

У меня есть матрица со сто строк. Есть ли способ получить подмножество из десяти строк, которые наиболее похожи на первую строку.R Самоорганизующееся подмножество

res2 <- matrix(rexp(200, rate=.1), ncol=10, nrow=100) 

set1 <- subset(res2, res2 >condition1) 
set1[with(set1, order(condition)), ] 
set2 <- head(set1,10) 
+7

Как вы определяете наиболее похожие? –

+0

Имея ближайший аналогичный шаблон. –

+2

Я думаю, что вопрос интересный, и я уверен, что другие могут тоже, но вы не предоставили много информации (как указал Кристоф) и не воспроизводимый пример (по крайней мере, набор данных). Левенштейн приходит на ум как возможный подход (возможно, с 'agrep') –

ответ

4

Возможно:

Генерация данных:

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]) равна нулю. Итак, все, что нам нужно сейчас, это строки со следующими десятью наименьшими расстояниями ...

res2[rr>1 & rr<=11,] 
+0

Это отлично! Большое вам спасибо за красивое решение. –

Смежные вопросы