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

How to stop single variable data.frame becoming a vector?

当只要求一个变量对 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)

...但这似乎非常多余。有没有更好的方法,即 "stay a data.frame, just give me a certain column"?

问题是我需要:

最好是使用列表子集。所有这些都会 return a data.frame:

data['a']

data[c('a')]

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

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

data[, 'a', drop = FALSE]