34

考虑一个具有自定义行名的数据框:

> data <- data.frame(a=1:3,b=2:4,c=3:5,row.names=c("x","y","z"))
> data
  a b c
x 1 2 3
y 2 3 4
z 3 4 5

如果我选择多于一列,R 将它们与行名一起打印:

> data[,c("a","c")]
  a c
x 1 3
y 2 4
z 3 5

但是,如果我只选择一列,R 会将其打印为一个简单的向量,而没有行名:

> data[,"c"]
[1] 3 4 5

我的问题是,我如何告诉 R 以与打印多列相同的方式打印列,即使用行名

4

3 回答 3

41

您可以使用该drop参数(另请参阅?'['):

data[,"c", drop=FALSE]

给你一个data.frame

  c
x 3
y 4
z 5
于 2013-04-08T11:03:48.007 回答
5

更简单的方法是data['c'],这将产生相同的输出:

  c
x 3
y 4
z 5
于 2019-03-17T18:16:52.670 回答
-1

与 data.frames 相比,从 R 中的矩阵获取列似乎保留了它们的(行)名称。我在 R 中发现的(很多!)奇怪的不一致之一......要获得一个命名向量,其中一个似乎有效:

as.matrix(data['c'])[,1]

或者

array(data['c'], dimnames=list(rownames(data)))
于 2021-07-25T08:05:41.260 回答