在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
答案 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