R 渗流聚类

R 渗流聚类,r,R,考虑以下分组: > data.frame(x = c(3:5,7:9,12:14), grp = c(1,1,1,2,2,2,3,3,3)) x grp 1 3 1 2 4 1 3 5 1 4 7 2 5 8 2 6 9 2 7 12 3 8 13 3 9 14 3 假设我不知道grp值,但只有一个向量x。生成grp值的最简单方法是什么,本质上是一组值的id字段,这些值在一个阈值内,彼此相距?这是一个渗流算法吗?一个选项是将下一个值与

考虑以下分组:

> data.frame(x = c(3:5,7:9,12:14), grp = c(1,1,1,2,2,2,3,3,3))
   x grp
1  3   1
2  4   1
3  5   1
4  7   2
5  8   2
6  9   2
7 12   3
8 13   3
9 14   3

假设我不知道
grp
值,但只有一个向量
x
。生成
grp
值的最简单方法是什么,本质上是一组值的id字段,这些值在一个阈值内,彼此相距?这是一个渗流算法吗?

一个选项是将下一个值与当前值进行比较,检查差值是否大于1,然后得到累积和

 df1$grp <- cumsum(c(TRUE, diff(df1$x) > 1))
 df1$grp
 #[1] 1 1 1 2 2 2 3 3 3
df1$grp 1))
df1$grp
#[1] 1 1 1 2 2 2 3 3 3

编辑:摘自@geotheory的评论。

@geotheory这与您在“grp”中的预期输出不一样吗。如果没有,你必须创建一个新的例子。事实上,我完全错了。你的是一个通用的解决方案——谢谢你的帮助:)不过我还不知道它是如何工作的@geotheory The
diff
获取相邻元素之间的差值,并给出长度小于原始向量1的输出。我们检查差值是否不等于1以得到逻辑向量。在开始时连接
TRUE
以调整长度,然后进行累加。这太疯狂了。“你用二进制思考吗?”geotheory谢谢你的评论。我以前可能解决过类似的问题。