【问题标题】:how to get each column as data.frame (instead of a vector) from a data.frame?如何从data.frame中获取每一列作为data.frame(而不是向量)?
【发布时间】:2012-04-06 19:06:24
【问题描述】:

通常当你得到一列时,它是一个向量。如何将其保留为具有相同行名和相应列名的 data.frame?

【问题讨论】:

  • @joran 抱歉,没有看到可能的重复项。我会留下我的回答,如果这个问题已经结束,我的回答将被删除。
  • @TylerRinker 别担心。这只是一个非常常见的问题,仅此而已。

标签: r vector dataframe


【解决方案1】:

不要使用逗号调用所需的列,即 data.frame[,i] 使用 data.frame[i] 将类保留为 data.frame 并保留行名。

data.frame[,i] #As a vector
data.frame[i] #As a data.frame

【讨论】:

  • 很好,我不知道你能做到 +1
  • 我想这为我的问题帖子增加了一些价值,不应该被关闭:)
【解决方案2】:

使用参数 drop = FALSE,如:

mtcars[, 1, drop = FALSE]

【讨论】:

    【解决方案3】:

    如果在对 data.frame 进行子集化时指定一个数字,则会得到一个单列 data.frame。这与矩阵子集不同,后者需要“缺失”i 参数来返回整个列(然后将其转换为向量)。

    # mtcars is a data.frame
    mtcars[1]       # first column
    str(mtcars[1])  # is still a data.frame
    # 'data.frame':   32 obs. of  1 variable:
    #  $ mpg: num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
    # MTCARS is a matrix
    MTCARS <- as.matrix(mtcars)
    as.matrix(MTCARS)[1]        # only the first element
    # [1] 21
    str(as.matrix(MTCARS)[,1])  # the first column, as a vector
     Named num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
     - attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" ...
    

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 2013-12-20
      • 2020-06-21
      相关资源
      最近更新 更多