我是 R 的新手 - 我在弄清楚如何缩放包含字符变量的数据集方面遇到了挑战。
但是,当我尝试使用缩放函数创建数据框时,出现错误:
df<-scale(USArrests)
Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric
有没有办法创建一个带有字符变量的数据框,以便稍后在聚类分析中使用它?
km.res<-kmeans(df,4,nstart=10)
最佳答案
?scale()
说scale
旨在使数字矩阵的列居中,有关详细信息,请参阅帮助条目。
然而,df <- USArrests
足以将所需的内置数据集存储为对象 df
(请参阅环境),如果您必须将其命名为 df。
比较以下内容:
df <- USArrests
# compare
head(df, n=5)
# to
df1 <- scale(df)
head(df1, n=5)
如您所见,所有数字列现在都进行了缩放,而行 ID、Alabama、...、Wyoming 当然没有变化。顺便说一句,要检查所有变量的类,您可以使用 lapply(df, class)
.
我想你应该没有问题然后调用km.res <- kmeans(df1,4,nstart=10)
.检查对象类型 km.res
.
老实说,我认为在运行之前kmeans()
您应该再次查看帮助页面(例如 help(kmeans)
)以了解参数 clusters
, iter
, ...
此外,我认为调查为什么或为什么不在上一步中将数据居中是个好主意。在任何情况下,都可以运行 kmeans()
具有中心 (df1) 和非中心 (df) 数据。为什么这些备选方案之一更合适是非常重要的。
编辑:建议在运行算法之前设置种子(例如 set.seed(09102021)
)。这样做可以确保结果的可重复性。
关于具有字符变量的 R 比例函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69136572/