从R中的数据框/矩阵中选择一列时,保留列名称

时间:2015-03-29 04:44:22

标签: r

在R中,当我从数据框/矩阵中只选择一列时,结果将变为向量并丢失列名,如何保留列名? 例如,如果我运行以下代码,

x <- matrix(1,3,3)
colnames(x) <- c("test1","test2","test3")
x[,1]

我会得到

[1] 1 1 1

实际上,我想要

     test1
[1,]     1
[2,]     1
[3,]     1

下面的代码给出了我想要的内容,但有没有更简单的方法呢?

x <- matrix(1,3,3)
colnames(x) <- c("test1","test2","test3")
y <- as.matrix(x[,1])
colnames(y) <- colnames(x)[1]
y

3 个答案:

答案 0 :(得分:20)

使用drop参数:

> x <- matrix(1,3,3)
> colnames(x) <- c("test1","test2","test3")
> x[,1, drop = FALSE]
     test1
[1,]     1
[2,]     1
[3,]     1

答案 1 :(得分:6)

另一种可能性是使用subset

> subset(x, select = 1)

     test1
[1,]     1
[2,]     1
[3,]     1

答案 2 :(得分:0)

问题提到“矩阵或数据框”作为输入。如果 x 是数据框,请使用 LIST SUBSETTING 表示法,这将保留列名并且默认情况下不会简化!

`x <- matrix(1,3,3)
colnames(x) <- c("test1","test2","test3")
x=as.data.frame(x)
x[,1]
x[1]`

数据框同时具有列表和矩阵的特征:如果您使用单个向量进行子集化,则它们的行为类似于列表;如果你用两个向量子集,它们的行为就像矩阵。 如果您选择单个,则有一个重要的区别 列:矩阵子集默认简化,列表 子集没有。 来源:详情见http://adv-r.had.co.nz/Subsetting.html#subsetting-operators