【发布时间】:2018-06-29 14:46:33
【问题描述】:
我正在努力使计算海量数据集(600,000 条记录)记录中的差异变得可行。
第一个任务是使用单个记录与不包括该记录的整个数据帧之间的欧几里得距离来计算差异。
考虑以下示例:
mydf <- data.frame(var1 = rnorm(5), var2 = rnorm(5), var3 = rnorm(5))
one_row <- mydf[1,]
问题分两步表述:
- 使用向量化操作返回一个长度为 4 的向量,与
one_row的每行相比,mydf[-1,] - 从点1的向量中,提取与
one_row更相似的行的索引
然后,我可以为 mydf 中的每一行迭代这个过程,因此,为每一行找到其最相似的行。这将允许我执行凝聚聚类以及计算基于距离矩阵的 Silhoutte 等统计标准。
更新
一种可能的方法是将 one_row 复制到相同大小的 mydf 并通过成对执行相似度计算来向量化。
replicated <- [rep(1, 5), 1:ncol(a)]
正确答案
Jesse Tweedle 和 won782 的回答对我的问题都是正确的。
Jesse Tweedle 的积极方面是可以自定义距离函数,从而允许使用混合数据类型。不利的一面是它不是一个单一的表达式,而是一个函数管道。
won782 的积极方面是它在单个表达式中执行。不利的一面是它只适用于矩阵,因此也适用于数值变量。
我选择 won782 答案是因为他的解决方案可以很容易地扩展为用作计算轮廓标准的基本组件,而无需存储相异矩阵。
【问题讨论】:
标签: r similarity