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谢谢你的评论。我以前可能解决过类似的问题。