You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调整数据框格式以适配聚类分析——以R语言USArrests数据集为例

如何将R数据框调整为适合聚类分析的正确格式(以USArrests为例)

嘿,我来帮你梳理下怎么把USArrests调整成适合聚类的格式——其实这个数据集本身底子就不错,但有几个关键步骤得做对,不然聚类结果会跑偏!

首先先回顾下你给出的数据集情况:
加载数据后用head(USArrests)得到的结果:

Murder Assault UrbanPop Rape
Alabama 13.2 236 58 21.2
Alaska 10.0 263 48 44.5
Arizona 8.1 294 80 31.0
Arkansas 8.8 190 50 19.5
California 9.0 276 91 40.6
Colorado 7.9 204 78 38.7

用str(USArrests)查看结构:

'data.frame': 50 obs. of 4 variables:
$ Murder : num 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
$ Assault : int 236 263 294 190 276 204 110 238 335 211 ...
$ UrbanPop: int 58 48 80 50 91 78 77 72 80 60 ...
$ Rape : num 21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...

第一步:确认数据结构符合要求

聚类分析要求所有参与计算的变量都是数值型(整数或浮点数),从str()的结果能看到,USArrests的4个变量全是数值类型,这已经满足最基础的条件了!不需要额外转换变量类型。

另外,数据集的行名是美国各州的名称,这很有用——聚类后我们可以用行名快速对应每个样本的聚类结果,不需要把行名转成单独的列(如果转成列的话,这个字符型变量会干扰聚类计算)。

第二步:标准化数据(最关键的一步!)

这一步绝对不能省!你看,Assault的数值范围是几百,而Murder只有个位数到十几,变量之间的尺度差异极大。聚类算法(比如k-means、层次聚类)都是基于距离计算的,尺度大的变量会完全主导距离结果,导致聚类只跟着Assault走,忽略其他变量的影响。

用R里的scale()函数就能快速完成标准化(默认是均值为0,标准差为1的标准化):

# 加载数据
data("USArrests")
# 标准化所有变量,得到一个矩阵(也可以转成数据框)
USArrests_scaled <- scale(USArrests)
# 转成数据框方便后续操作和查看
USArrests_scaled_df <- as.data.frame(USArrests_scaled)
# 查看标准化后的前6行
head(USArrests_scaled_df)

运行后你会看到每个变量的数值都被缩放到了相近的范围,这样每个变量在聚类时的权重才是平等的。

第三步:验证最终格式

处理完之后,你可以再用str(USArrests_scaled_df)检查结构,确认所有变量都是标准化后的数值型:

str(USArrests_scaled_df)

输出应该是类似这样的:

'data.frame': 50 obs. of 4 variables:
$ Murder : num 1.24 0.574 0.072 0.232 0.287 ...
$ Assault : num 0.783 1.104 1.478 0.272 1.258 ...
$ UrbanPop: num -0.529 -1.222 1.007 -1.084 1.767 ...
$ Rape : num -0.0034 2.4846 1.0439 -0.1849 2.0678 ...

到这一步,你的数据就完全适合聚类分析了!不管是用k-means的kmeans()函数,还是层次聚类的hclust()函数,都可以直接用这个标准化后的数据集。

常见避坑点

  • 不要把行名(州名)转成列参与聚类,字符型变量会导致距离计算出错
  • 绝对不能跳过标准化步骤,除非你的所有变量本身尺度就完全一致
  • 如果数据里有缺失值,要先处理(比如用na.omit()删除,或者用均值填充),聚类算法无法处理缺失值

内容的提问来源于stack exchange,提问作者The Statistician Magician

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:24:20