与索引和变量名相比,cbind有什么区别

问题描述 投票:0回答:1

使用此示例的虹膜数据集,因为很多人都知道它。

我缩放了数据集的前4个变量,并将其命名为scaled.iris。standardized.iris <- scale(iris[,-5])为什么现在我按索引绑定一列为什么会有区别cbind(scaled.iris,iris[5])或按变量名cbind(scaled.iris,iris$Species)

[前者给我一个data.frame,其中包含一列带有实际标签(“ setosa”,“ versicolor”,...)加上正确的列名,后者给我一个没有列名和字符值的矩阵1 -3。

r cbind iris-dataset
1个回答
0
投票

这是由于要调用的对象的类。与cbind()无关。

当使用列号从数据框中选择一列时,所选列将被提取为数据框。如果仅调用一列,则提取的对象将是具有一列的数据帧。如果调用了不止一列,则提取的对象将是具有与调用的列一样多的数据帧。

当使用列名选择列时,所选列被提取为没有名称的向量。如果调用单个列,则提取的对象将是单个向量。如果调用了多个列,则提取的对象将是与调用的向量数量相等的向量。

如果运行str(),则可以找到区别。

> str(iris[1])
'data.frame':   150 obs. of  1 variable:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...

> str(iris$Sepal.Length)
 num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...

您可能看到前者的类是由数字向量组成的data.frame,而后者的类是数字。

© www.soinside.com 2019 - 2024. All rights reserved.