使用给定阈值对数值进行聚类。

3

我有多个向量:

a <- c(1.1, 2.9, 3.9, 5.2)
b <- c(1.0, 1.9, 4.0, 5.1)
c <- c(0.9, 2.1, 3.1, 4.1, 5.0, 11.13)

它们可以有不同的长度。

我想以这样的方式将它们组合起来,以获得一个通用向量,如果所有向量或其中任意一对具有相似的含义,则计算平均值;如果只有一个向量具有这个含义,则使用初始含义。为了计算平均值,我想使用阈值=0.2。

我的解释可能有点混淆,但这是我想要获取的通用向量:

d <- c(1, 2, 3, 4, 5.1, 11.13)

我有大约12个向量,每个向量中包含约2000个值。

非常感谢您的任何帮助。


你能解释一下你是如何得到1、2、3的吗? - zx8754
这个回答解决了你的问题吗? R语言中不等长列表的平均数 - Merijn van Tilborg
应该是5.1而不是5吧? - ThomasIsCoding
a[1] = 1.1 b[1] = 1.0 c[1] = 0.9 平均值 = 1a[2] = 2.9 - 这意味着与其他向量的平均值相比,差异超过0.2(阈值) b[2] = 1.9 c[c] = 2.1 a和b的平均值 = 2a[2] = 2.9(与前一步相比,它没有被归入通用向量中) b[3] = 4.0(与前一步中的a[3]情况相同) c[3] = 3.1 a和c的平均值 = 3a[6] = NA b[6] = NA c[6] = 11.13 因此d[6] = 11.13 - MarinaZav
哦,抱歉,实际上应该是5.1。 - MarinaZav
那个任务相似,但意义被平均因为它们的索引。在我的情况下,相似的意思可能会停留在不同的索引上。 - MarinaZav
1个回答

6

看起来像是一个聚类问题(按距离进行聚类)。您可以尝试下面的代码:

library(igraph)

v <- sort(c(a, b, c))

tapply(
    v,
    membership(components(graph_from_adjacency_matrix(as.matrix(dist(v)) <= 0.2 + sqrt(.Machine$double.eps)))),
    mean
)

这提供了

    1     2     3     4     5     6
 1.00  2.00  3.00  4.00  5.10 11.13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接