我们说我有一个矩阵,
A = matrix(c(1,23,4,5,6,3,2,2,1,2), nrow = 2, ncol = 5)
由rownames和列名称给出,
rownames(A) = c('row1', 'row2')
colnames(A) = c('es', 'one', 'column', 'no', '5')
如果我这样做:
> my.slice = A[1,,drop=FALSE]
es one column no 5
1 4 6 2 1
我仍然看到列名。但如果我这样做:
> my.slice = as.numeric(A[1,,drop=FALSE])
[1] 1 4 6 2 1
我丢失了列名,两者实际上都是数字类。
有没有办法做as.vector并保留列名?或者更一般地说,将矩阵切割成名称为(my.slice)= colnames(A)的数字类向量?
注意(小故事)。当我将默认设置为drop = FALSE时,一切都开始了。然后我需要在切片矩阵时做as.vector但遗憾的是现在我松开了my.slice中元素的名称。
答案 0 :(得分:1)
使用setNames
:
(my.slice = setNames(A[1,], colnames(A)))
es one column no 5
1 4 6 2 1
class(my.slice)
[1] "numeric"
答案 1 :(得分:0)
您可以将矩阵转换为数据框,对其进行切片,然后使用unlist
将切片制作成命名向量:
B <- as.data.frame(A)
my.slice <- unlist(B[1,])
只要列名不包含奇怪的字符,这就可以工作:数据框的列名必须在语法上被接受为变量的名称,因此它们不能以数字或标点符号开头。