【问题标题】:Finding the right package in R for cluster analysis在 R 中寻找合适的包进行聚类分析
【发布时间】:2020-09-12 09:15:22
【问题描述】:

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

我想知道的是集群持续时间/大小以及每个集群的各个值。

例如(一个简单的):

我有一个数据向量,

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 做的是在单独的有序向量中返回集群,例如

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

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

干杯

【问题讨论】:

    标签: r cluster-analysis


    【解决方案1】:

    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 包,那么来自 https://stackoverflow.com/a/33509966 的 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)))
    

    【讨论】:

    • 非常感谢,这正是我想要的。
    猜你喜欢
    • 2011-09-12
    • 2018-08-24
    • 1970-01-01
    • 2012-02-24
    • 2019-09-08
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多