Поиск подходящего пакета в R для кластерного анализа - PullRequest
1 голос
/ 25 мая 2020

Я пытаюсь найти пакет в 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, например, тоже может помочь.

Ура

1 Ответ

1 голос
/ 25 мая 2020

Для этого хорошо работает функция 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)))
...