【问题标题】:R Self Organising SubsetR 自组织子集
【发布时间】:2012-08-05 00:56:51
【问题描述】:

我有一个有一百行的矩阵。 有没有办法获得与第一行最相似的十行的子集。

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

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

【问题讨论】:

  • 你如何定义最相似的?
  • 具有最接近的相似模式。
  • 我认为这个问题很有趣,我相信其他人也可能如此,但您没有提供太多信息(正如 Christoph 指出的那样),也没有可重复的示例(至少是数据集)。 Levenshtein 作为一种可能的方法浮现在脑海中(可能是agrep
  • 我将尝试发布一个示例和一个可以改进的可能的起始解决方案

标签: r


【解决方案1】:

也许:

生成数据:

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,]

【讨论】:

  • 太棒了!非常感谢您漂亮的解决方案。
猜你喜欢
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 2012-10-16
  • 2011-01-18
相关资源
最近更新 更多