R 将向量的邻近元素分组
我有一个向量,我想做的是根据元素之间的距离将它们“标记”成组 示例数据R 将向量的邻近元素分组,r,vector,R,Vector,我有一个向量,我想做的是根据元素之间的距离将它们“标记”成组 示例数据 c(34, 34, 35, 35, 120, 121, 121, 365, 366) 在这种情况下,我想将34,34,35,35分为一组,然后将120,121,121分为另一组,最后将365,366分为另一组 有什么聪明的方法可以做到这一点吗?通常可以使用特殊的R包进行集群。但在矢量争论中,这可能是一个很好的练习: 如果您知道集群的数量(k) 。。。你的向量是(有序的)vec: k <- 3 clusters <
c(34, 34, 35, 35, 120, 121, 121, 365, 366)
在这种情况下,我想将34,34,35,35
分为一组,然后将120,121,121
分为另一组,最后将365,366
分为另一组
有什么聪明的方法可以做到这一点吗?通常可以使用特殊的R包进行集群。但在矢量争论中,这可能是一个很好的练习: 如果您知道集群的数量(k) 。。。你的向量是(有序的)
vec
:
k <- 3
clusters <- diff(c(0, tail(order(diff(vec)), k-1), length(vec)))
或者你只知道最大距离
定义最大差值d
:
d <- 10
clusters <- diff(c(0, tail(order(diff(vec)), sum(diff(vec)>d)), length(vec)))
请参见
kmeans
算法。@ColonelBeauvel您应该根据该评论写一个答案。kmeans(数据,3)
如果data
是您的向量不幸的是@muc8,通常您事先不知道k
,这并不是如此简单;)您还可以使用cut()
函数。例如,cut(数据,c(0,50200500)
如果数据
是你的向量。谢谢你,bergant。我的问题是我事先不知道集群的数量…你必须提供一些标准。在这个例子中还有一个变量d
=集群内的最大距离。你能从排序(diff(vec))估计最大距离d
?是的,我知道最大距离,它对我来说总是固定的。方案B应该可以。
d <- 10
clusters <- diff(c(0, tail(order(diff(vec)), sum(diff(vec)>d)), length(vec)))
split(vec, rep(1:length(clusters), clusters))