如何从data.frame中提取单个列作为data.frame?

时间:2014-01-09 16:21:23

标签: r dataframe subset

说我有一个data.frame:

df <- data.frame(A=c(10,20,30),B=c(11,22,33), C=c(111,222,333))
  A  B  C
1 10 11 111
2 20 22 222
3 30 33 333

如果我选择两个(或更多)列,我会得到一个data.frame:

x <- df[,1:2]
   A  B
 1 10 11
 2 20 22
 3 30 33

这就是我想要的。但是,如果我只选择一列,我会得到一个数字向量:

x <- df[,1]
[1] 1 2 3

我尝试使用as.data.frame(),它不会更改两列或更多列的结果。它确实在一列的情况下返回data.frame,但不保留列名:

x <- as.data.frame(df[,1])
     df[, 1]
1       1
2       2
3       3

我不明白为什么它会像这样。在我看来,如果我提取一个或两个或十个列,它应该没有区别。 IT应始终返回向量(或矩阵)或始终返回data.frame(具有正确的名称)。我错过了什么?谢谢!

注意:这不是关于矩阵的问题的重复,因为矩阵和data.frame在R中是根本不同的数据类型,并且可以与dplyr不同地工作。有几个答案适用于data.frame但不适用于矩阵。

2 个答案:

答案 0 :(得分:70)

使用drop=FALSE

> x <- df[,1, drop=FALSE]
> x
   A
1 10
2 20
3 30

从文档(参见?"[")中您可以找到:

  

如果drop = TRUE,结果将被强制转换为可能的最低维度。

答案 1 :(得分:23)

省略,

x <- df[1]

   A
1 10
2 20
3 30

来自?"["的帮助页面:

  

索引[类似于原子向量并选择指定元素的列表。

数据框是一个列表。列是它的元素。