假设我有一个包含N列的矩阵A,我从该矩阵中取2个(或任何子集)列来构造一个新的矩阵B,例如:
B = cbind(A[,1], A[,3])
我可以添加一个简单的参数,以便传输两列的标题名称吗?使用names(B) = names(A)
将无效,因为矩阵的维度不同。
答案 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)]