Как суммировать результаты кластеризации pam в R? - PullRequest
1 голос
/ 23 января 2020

Если я пытаюсь запустить приведенный ниже код, чтобы получить сводку результатов кластеризации, я получаю следующую ошибку:

Error in UseMethod("mutate_") : no applicable method for 'mutate_' applied to an object of class "table"

Этот код работает если dat_ является фреймом данных, но если это таблица, то получите сообщение об ошибке выше. у кого-нибудь есть решение?

    pam_fit <- pam(gower_dist, diss = TRUE, k)  # performs cluster analysis
    pam_results <- dat %>%
      mutate(cluster = pam_fit$clustering) %>%
      group_by(cluster) %>%
      do(the_summary = summary(.))
    pam_results$the_summary

Пример набора данных:

set.seed(1)
dat <- data.frame(ID = rep(sample(c("a","b","c","d","e","f","g"),10,replace = TRUE),70),
                 disease = sample(c("flu","headache","pain","inflammation","depression","infection","chest pain"),100,replace = TRUE))

dat <- unique(dat)

dat2 <- table(dat)
dat3 <- as.data.frame(dat)

1 Ответ

0 голосов
/ 23 января 2020

Если вы посмотрите на данные, у каждого идентификатора есть несколько наблюдений, и вы пытаетесь разделить идентификатор на кластеры, основываясь на столбце их болезни. Таким образом, результаты вашего кластера должны быть такими же, как ваш идентификатор, и если вы хотите суммировать результаты, вы делаете это для каждого кластера.

Чтобы собрать таблицы, выполните:

library(cluster)
library(tidyverse)

pam_fit <- pam(daisy(dat2,"gower"), diss = TRUE, 2)  # performs cluster analysis

pam_results <- as.data.frame.matrix(table(dat)) %>%
mutate(cluster = pam_fit$clustering) %>%
      group_by(cluster) %>%
      do(the_summary = summary(.))
    pam_results$the_summary

Или вы можете просто написать функцию:

doPAM = function(M){
pam(daisy(M,"gower"), diss = TRUE, 2)$clustering
}

pam_results <- as.data.frame.matrix(table(dat)) %>%
mutate(cluster = doPAM(.)) %>%
      group_by(cluster) %>%
      do(the_summary = summary(.))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...