【问题标题】:What is the difference in cbind when used with index compared with variable name与索引一起使用时cbind与变量名有什么区别
【发布时间】:2020-05-14 09:10:37
【问题描述】:

在这个例子中使用 iris 数据集,因为很多人都知道。

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

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

【问题讨论】:

  • 欢迎来到 SO。请包含您用于执行缩放的代码,因为这可以让社区从编码的角度理解您的问题,并允许测试和验证答案。用于提问的有用链接是:How to Askminimal reproducible example

标签: r cbind iris-dataset


【解决方案1】:

这是因为被调用的对象的类。与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,而后者的类是数字。

【讨论】:

    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 2013-08-08
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多