【问题标题】:R scale function not working from csv file importR缩放功能不适用于csv文件导入
【发布时间】:2021-07-21 17:18:58
【问题描述】:

我有类似这个主题的同样问题 [https://stackoverflow.com/questions/50107157/adding-labels-to-cluster, 我按照答复的答案仍然对我不起作用 尝试从此 [https://stackoverflow.com/questions/8120984/scaling-data-in-r-ignoring-specific-columns 也仍然无法正常工作

到目前为止,我的代码只是从这个主题 [https://uc-r.github.io/kmeans_clustering 和 [https://afit-r.github.io/kmeans_clustering 如下所示

1. library(tidyverse)
2. library(cluster)
3. library(factoextra)
4. dataMCU = read.csv("MCU180721.csv")
5. dataMCU <- na.omit(dataMCU)
6. dataMCU <- scale(dataMCU) 

此行号:6 无法继续,因为在 colMeans(x, na.rm = TRUE) 中显示类似这样的错误错误:'x' 必须是数字

有关附加信息,我在 csv 文件中的表格描述如下 区, 绿色, 耶洛, 橙子, 红 俄勒冈州, 6, 7, 8, 9

我的问题是如何解决这个问题。 最近我在运行scale()之前尝试过使用此代码dataMCU&lt;-dataMCU[,c(-1)] 此解决方案有效,但不如预期。因为我希望得到相同的结果,就像 [https://uc-r.github.io/kmeans_clustering 和 [https://afit-r.github.io/kmeans_clustering

更多信息: 这个来自 [https://afit-r.github.io/kmeans_clustering

但我的代码总是如下图所示

【问题讨论】:

  • 你可以在第 4 行之后添加 dput(head(dataMCU)) 吗?
  • dataMCU

标签: r


【解决方案1】:

您的数据框具有字符向量。您可以将状态作为行名并删除第一列。

rownames(dataMCU) <- dataMCU$Precint
dataMCU <- dataMCU[,-1]

然后,您可以删除 NA 行并缩放数据框。

dataMCU <- na.omit(dataMCU)
dataMCU <- scale(dataMCU)

继续距离矩阵和聚类:

distance <- get_dist(dataMCU)
fviz_dist(distance, gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))

clust <- kmeans(dataMCU, centers = 2, nstart = 25)

fviz_cluster(clust, data = dataMCU)

P.S.:为避免手动解决方法,您只需将 csv 文件导入为

dataMCU = read.csv("fMCU180721.csv", row.names = 1, header= TRUE)

编辑:

导入带有行名的 csv:

dataMCU = read.csv("DataPrecint.csv", row.names=1, header=TRUE)
dataMCU <- na.omit(dataMCU)
dataMCU <- scale(dataMCU)
distance <- get_dist(dataMCU)
fviz_dist(distance, gradient=list(low="green", mid="yellow", high="red"))
k4 <- kmeans(dataMCU, centers=4, nstart=25)
str(k4)
k4
fviz_cluster(k4, data = dataMCU)

【讨论】:

  • code dataMCU = read.csv("precints.csv") rownames(dataMCU) code 谢谢你的帮助。此代码有效,但结果(情节)仍未将城市名称显示为标签。该图仍将数字显示为标签。
  • 不是区域,而是区域。对象和变量区分大小写。试试 rownames(dataMCU)
  • $Precints = 这是来自这个 read.csv("Precints.csv") 的变量?
  • [link] pastebin.com/Acb0KciR 我按照您的说明进行操作,因为变量区分大小写,链接上的代码。但结果相同,不显示城镇名称
  • 检查我的编辑。如果您使用行名导入 csv,则不必重命名行并删除列。
猜你喜欢
  • 2015-11-27
  • 2022-07-29
  • 2021-04-28
  • 2017-01-26
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
相关资源
最近更新 更多