我有一个矢量,我想做的是"标签"将元素分组,取决于它们的接近程度。
示例数据
c(34, 34, 35, 35, 120, 121, 121, 365, 366)
在这种情况下,我想将34, 34, 35, 35
分组到一个组中,然后120, 121, 121
分组到另一个组中,最后365, 366
分组到另一个组中。
有一些聪明的方法吗?
答案 0 :(得分:1)
通常可以使用特殊的R包进行群集。但它可能是矢量争论的一个很好的练习:
...你的矢量是(有序的)vec
:
k <- 3
clusters <- diff(c(0, tail(order(diff(vec)), k-1), length(vec)))
要按群集拆分矢量,请使用split:
split(vec, rep(1:length(clusters), clusters))
定义最大差异d
:
d <- 10
clusters <- diff(c(0, tail(order(diff(vec)), sum(diff(vec)>d)), length(vec)))
要按群集拆分矢量,请使用split:
split(vec, rep(1:length(clusters), clusters))