【问题标题】:Kmeans clustering error: Issue plotting the clustersKmeans 聚类错误:绘制聚类的问题
【发布时间】:2020-02-04 00:30:55
【问题描述】:

我正在从之前创建的数据帧中读取数据。我必须从我的数据框中选择一些向量来完成这项任务。但是,当我重新调整我的数据框对象时,它变成了“双”(而不是“列表”)。

我可以成功地对数据进行聚类,但我无法绘制它。

但我无法在简单的 2D 图中绘制它,因为我收到以下错误:

错误:data 必须是数据框,或其他可被fortify() 强制转换的对象,而不是列表

我也尝试使用 as.list 来转换 ilpd_df2 以将其从“double”转换回“list”,但它仍然没有绘图。

#Task 2.1 - Load Preprocessed Data and Subset Data as directed
    ilpd_df <- readRDS(file="ilpd_preprocessed.Rda")
    ilpd_df1 <-
    select(ilpd_df,"TB","DB","Alkphos","Sgpt","Sgot","TP","Albumin")

#Task 2.2 - Re-Scaling
    ilpd_df2 <- apply(ilpd_df1, MARGIN = 2, FUN=function(X) 
    (X - min(X))/diff(range(X)))

#Task 2.3 - Cluster the Data into 2 Clusters
    set.seed(44)
    ilpd_clusters <- kmeans(ilpd_df2, 2, nstart = 25, iter.max=5)
    ggplot(ilpd_df2, aes(Alkphos, TP)) + geom_point()


Error: `data` must be a data frame, or other object coercible by `fortify()`, not a list

【问题讨论】:

  • ggplot(data = ilpd_df2) + geom_point(aes(Alkphos, TP, color = ilpd_clusters$clusters))
  • 看起来您正在使用 dplyr::select()。这将产生一个 tibble 而不是数据框,因此您需要将其强制转换为数据框。
  • 嗨@Dij,我试过你的,但它不起作用=(
  • 嗨@Elin,哦,好吧,因为我对 R 比较陌生,所以我不知道 tibbles。
  • @Elin,所以我将它强制转换为数据框,它可以工作!我做了以下 ilpd_df2

标签: r cluster-analysis data-mining k-means


【解决方案1】:

@Elin 向我指出了我的错误,他提出了以下建议:

1) 使用 dplyr::select() 会产生一个 tibble。 2) 将 tibble 强制转换为数据框

根据我自己的理解和@Elin 的指导,我做了以下事情:

将 tibble 更改为数据框

ilpd_df2 <- as.data.frame(ilpd_df2)

然后我运行代码并生成了以下图:

【讨论】:

  • 你应该接受你自己的答案。如果您尝试在 tidyverse 之外使用 tidyverse 结构,您会经常遇到这个问题。
猜你喜欢
  • 2016-02-02
  • 2011-07-02
  • 2017-12-19
  • 2013-02-22
  • 2012-06-30
  • 2019-07-17
  • 2019-11-29
  • 2013-11-18
  • 1970-01-01
相关资源
最近更新 更多