如何阻止单变量data.frame成为一个向量?

时间:2015-01-05 21:14:45

标签: r

当仅仅询问一个变量对data.frame进行子集化时,我们得到一个向量。这就是我们要求的,所以这并不奇怪。但是,在其他情况下(如果我们要求多一列),我们会得到一个data.frame对象。例如:

> data <- data.frame(a=1:10, b=letters[1:10])
> str(data)
'data.frame':   10 obs. of  2 variables:
 $ a: int  1 2 3 4 5 6 7 8 9 10
 $ b: Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10
> data <- data[, "b"]
> str(data)
 Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10

如果我需要data对象不改变data.frame的类型,无论它只有一个变量,我该怎么做?我唯一想到的是:

data <- data[, "a"]
data <- as.data.frame(data)

......但这似乎非常多余。有没有更好的方法,即一种说法&#34;保持data.frame的方式,只需给我一个专栏&#34;?

问题在于我需要:

  • 使用不同长度的变量名称向量的子集
  • 每次以名称作为输出获得data.frames

1 个答案:

答案 0 :(得分:7)

最好是使用列表子集。所有这些都将返回data.frame:

data['a']

data[c('a')]

data[c('a', 'b')]

使用矩阵子集,您必须添加drop = FALSE

data[, 'a', drop = FALSE]