Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将向量的邻近元素分组_R_Vector - Fatal编程技术网

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))