【问题标题】:How do I extract a single column from a data.frame as a data.frame?如何从 data.frame 中提取单个列作为 data.frame?
【发布时间】:2014-01-09 16:21:22
【问题描述】:

假设我有一个 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(具有正确的名称)。我错过了什么?谢谢!

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

【问题讨论】:

  • 这不是重复的,因为 matrix 和 data.frame 可以与 dplyr 不同地工作。
  • 对于data.frame,用dplyr整理的方式:select:mtcars %&gt;% dplyr::select("wt")

标签: r dataframe subset


【解决方案1】:

使用drop=FALSE

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

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

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

【讨论】:

    【解决方案2】:

    省略,

    x <- df[1]
    
       A
    1 10
    2 20
    3 30
    

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

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

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

    【讨论】:

    • 或者:df["A"]
    猜你喜欢
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2014-12-15
    • 1970-01-01
    • 2021-08-03
    • 2015-06-26
    • 2021-07-16
    相关资源
    最近更新 更多