str()显示USArrests有4列,但有5列。为什么这是当前分析的一部分,但在str()中却没有

时间:2019-04-20 09:40:10

标签: r dataframe

R中的结构函数表明USArrests仅具有4个变量。 但是,有5个。状态名称在第一列中,但未标记。

我正在努力了解其背后的直觉以及其工作原理。 我已经对数据进行了K均值聚类算法,似乎第一列(状态名称)在分析中充当了标签。无需使用分类数据。
这是我使用的教程。 https://uc-r.github.io/kmeans_clustering

下面是一些代码,可以更清楚地说明自己。

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 ...
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

在K均值聚类中它看起来像是“标签”

library(tidyverse)  # data manipulation
library(cluster)    # clustering algorithms

数据清理

df <- USArrests
df <- na.omit(df)

缩放

(df <- scale(df))

计算K均值聚类

k2 <- kmeans(df, centers = 2, nstart = 25)

样本输出

Clustering vector:
       Alabama         Alaska        Arizona       Arkansas     California  
             2              2              2              1              2

如果只有四个变量,那么R或聚类算法如何知道如何将聚类与状态名称相关联,从技术上讲,它不是列?

1 个答案:

答案 0 :(得分:2)

第一个“列”实际上不是列,而是数据集的索引。而不是像默认值那样,索引为1,2,3,4等,而是阿拉巴马州,阿拉斯加,亚利桑那州,阿肯色州等。这就是为什么运行str()函数仅给我们4列的原因,因为从未处理过索引作为列。

现在,聚类输出显示每个状态属于哪个聚类。这只是索引,最后的算法告诉我们每行属于哪个集群。例如,如果索引是1、2、3、4等(而不是状态名称),我们仍然会得到结果,因为第1行是集群2,第2行是集群2,第3行是集群2,行4位于群集1等中。该算法执行您要求的操作。它会看到索引,并根据该索引标记相应的群集。 希望这可以帮助。