2012-08-04 50 views
0

我有一个有100行的矩阵。 有没有办法获得十行最接近第一行的子集。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

您如何定义最相似的? – 2012-08-04 11:18:56

+0

具有最接近的相似模式。 – 2012-08-04 13:52:57

+2

我认为这个问题很有趣,我相信其他人可能也是如此,但是你没有提供很多信息(正如Christoph所指出的那样)并且没有可重复的例子(至少是一组数据)。作为一种可能的方法,Levenshtein会想到(也许用'agrep') – 2012-08-04 13:56:51

回答

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

上改进的示例和一个可能的开始解决方案。这非常棒!非常感谢你的美丽解决方案。 – 2012-08-04 17:54:48