如何阻止单个变量 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"?
问题是我需要:
- 使用不同长度的变量名向量进行子集化
- 得到
data.frames
,每次名字不变作为输出。
最好是使用列表子集。所有这些都会 return a data.frame:
data['a']
data[c('a')]
data[c('a', 'b')]
使用矩阵子集化,您必须添加 drop = FALSE
:
data[, 'a', drop = FALSE]
当只要求一个变量对 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"?
问题是我需要:
- 使用不同长度的变量名向量进行子集化
- 得到
data.frames
,每次名字不变作为输出。
最好是使用列表子集。所有这些都会 return a data.frame:
data['a']
data[c('a')]
data[c('a', 'b')]
使用矩阵子集化,您必须添加 drop = FALSE
:
data[, 'a', drop = FALSE]