在 R 中找到正确的包以进行聚类分析

Finding the right package in R for cluster analysis

我试图在 R 中找到一个包,我可以在其中找到超过数据集中给定阈值的集群。

我想知道的是集群 duration/size 和每个集群的单独值。

例如(简单的一个):

我有一个数据向量,

10 8 6 14 14 7 14 5 11 12 8 11 11 16 20 6 8 8 6 15

大于9的簇以粗体定义,

10 8 6 14 14 7 14 5 11 12 8 11 11 16 20 6 8 8 6 15

所以这里的簇大小按顺序是,

1, 2, 1, 2, 4, 1

我想让 R 做的是 return 单独有序向量中的簇,例如

[1] 10
[2] 14 14
[3] 14
[4] 11 12
[5] 11 11 16 20
[6] 15

是否有这样的包或一段带有 if 语句的代码也有帮助。

干杯

data.table::rleid 函数适用于此:

Filter(function(a) a[1] > 9, split(vec, data.table::rleid(vec > 9)))
# $`1`
# [1] 10
# $`3`
# [1] 14 14
# $`5`
# [1] 14
# $`7`
# [1] 11 12
# $`9`
# [1] 11 11 16 20
# $`11`
# [1] 15

如果您不想为此加载 data.table 包,那么 :

中的 base-R 方法
myrleid <- function(x) {
  rl <- rle(x)$lengths
  rep(seq_along(rl), times = rl)
}
Filter(function(a) a[1] > 9, split(vec, myrleid(vec > 9)))