与变量名相比,与索引一起使用时cbind有什么区别
What is the difference in cbind when used with index compared with variable name
这个例子使用鸢尾花数据集,因为很多人都知道。
我缩放了数据集的前 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 的矩阵。
这是因为被调用对象的class。与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 ...
可以看到前者的class是一个数值向量组成的data.frame,后者的
这个例子使用鸢尾花数据集,因为很多人都知道。
我缩放了数据集的前 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 的矩阵。
这是因为被调用对象的class。与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 ...
可以看到前者的class是一个数值向量组成的data.frame,后者的