【问题标题】:R scale function with character variable具有字符变量的 R 缩放函数
【发布时间】:2021-09-13 00:38:29
【问题描述】:

我对 R 比较陌生 - 我在弄清楚如何缩放包含字符变量的数据集时遇到了挑战。

但是,当我尝试使用 scale 函数创建数据框时,出现错误:

 df<-scale(USArrests)
Error in colMeans(x, na.rm = TRUE) : 'x' must be numeric

有没有办法创建一个带有字符变量的数据框,以便以后在聚类分析中使用它?

km.res<-kmeans(df,4,nstart=10)

【问题讨论】:

  • 请不要发布代码/数据/错误的图像:它会破坏屏幕阅读器并且无法复制或搜索(参考:meta.stackoverflow.com/a/285557xkcd.com/2116)。请直接包含代码、控制台输出或数据(例如,data.frame(...) 或来自dput(head(x)) 的输出)。
  • (我说在对 datasets 包中的数据尝试了 scale(USArrests) 之后,我没有收到错误消息。也许您之前可能已经为“清理”或“groom”USArrests 损坏了其中的某些内容。如果您将行名作为列引入,那么可能是scale(USArrests[,-1])?)
  • 我意识到我的第一条评论(关于图片)可能有点过早/苛刻,因为 USArrests 来自 datasets 包。
  • 谢谢@r2evans,我会记住这一点。我已经删除了图像。哦,好吧,谢谢,是的,我看到它是在实际修改数据时。用原始文件替换数据集 100% 有效。感谢您的帮助!

标签: r dataframe cluster-analysis scale


【解决方案1】:

?scale() 表示scale 被设计为数字矩阵的中心列,有关详细信息,请参阅帮助条目。 但是,df &lt;- USArrests 足以将所需的内置数据集存储为对象 df(请参阅环境),如果您必须将其命名为 df。 比较以下:

df <- USArrests
# compare
head(df, n=5)
# to 
df1 <- scale(df)
head(df1, n=5)

如您所见,所有数字列现在都进行了缩放,而行 ID、阿拉巴马州、...、怀俄明州当然不会改变。顺便说一句,要检查所有变量的类,您可以使用lapply(df, class)

我认为您应该没有问题,然后致电km.res &lt;- kmeans(df1,4,nstart=10)。检查对象类型km.res

老实说,我认为在运行 kmeans() 之前,您应该再次查看帮助页面(例如 help(kmeans))以了解参数 clustersiter、... 此外,我认为调查在上一步中为什么或为什么不将数据居中是一个好主意。在任何情况下,都可以使用居中 (df1) 和未居中 (df) 数据运行 kmeans()。为什么其中一种选择更合适是非常重要的。

编辑:建议在运行算法之前设置一个种子(例如set.seed(09102021))。这样做可以确保结果的可重复性。

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2014-11-13
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多