在R中传输矩阵列的标题名称

时间:2012-12-13 18:03:05

标签: r

假设我有一个包含N列的矩阵A,我从该矩阵中取2个(或任何子集)列来构造一个新的矩阵B,例如:

B = cbind(A[,1], A[,3]) 

我可以添加一个简单的参数,以便传输两列的标题名称吗?使用names(B) = names(A)将无效,因为矩阵的维度不同。

2 个答案:

答案 0 :(得分:3)

一个例子会有很大帮助,因为我怀疑你可能正在使用一个错误调用矩阵的数据帧。我这样说是因为与矩阵一起使用的名称&lt; - 函数会破坏矩阵结构。修改列名的正确函数是colnames<-。此外,如果您使用“[”函数从矩阵中提取列,则列名称几乎不会遇到值:

> mat <- matrix(1:9, 3)
> colnames(mat) <- letters[1:3]
> mat[ , 2:3]
     b c
[1,] 4 7
[2,] 5 8
[3,] 6 9

回复您的评论,最好这样做:

B <- A[ , c(1,3) ]

然后您的列名称将被正确转移。 (注意补充:我很惊讶你的cbind操作没有带来col.names,并想知道为什么会这样。这个版本使用“[”与cbind确实保留了col.names:

> B=cbind( A[,1,drop=FALSE], A[,3,drop=FALSE])
> B
     a c
[1,] 1 7
[2,] 2 8
[3,] 3 9

“[”函数会将单个列或行强制转换为原子向量,并且显然也会丢失其dimnames属性。 drop=FALSE可以防止这种损失。

答案 1 :(得分:1)

您可以将子集与'select'?subset

一起使用
 B <- subset(A,select = c(col1,col2))  

e.g

 A <- mtcars
 B <- subset(A,select = c(mpg,cyl))

                      mpg cyl
Mazda RX4         21.0   6
Mazda RX4 Wag     21.0   6
Datsun 710        22.8   4
Hornet 4 Drive    21.4   6
Hornet Sportabout 18.7   8
Valiant           18.1   6

如果您按索引执行:

      B=cbind(A[,1],A[,3])
      colnames(B) <- colnames(A)[c(1,3)]