将as.vector应用于矩阵切片时保留列名

1mrurvl1  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(115)

假设我有一个矩阵

A = matrix(c(1,23,4,5,6,3,2,2,1,2), nrow = 2, ncol = 5)

行名和列名由给出,

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

我丢失了列名,实际上这两个列名都是数值类。
有没有一种方法可以像. vector一样做并保留列名?或者更一般地说,将矩阵切片成一个names(my.slice)= colnames(A)的数字类向量?
这一切都是从我设置默认值为drop=FALSE开始的,然后我需要在对矩阵切片时使用. vector,但遗憾的是,现在我丢失了my.slice中元素的名称。

djmepvbi

djmepvbi1#

您可以将矩阵转换为 Dataframe ,对其进行切片,并使用unlist将切片转换为命名向量:
B <- as.data.frame(A)
my.slice <- unlist(B[1,])
只要列名不包含奇怪的字符,这就可以工作:数据框的列名必须在语法上可接受为变量名,因此它们不能以数字或标点符号开始。

ar7v8xwq

ar7v8xwq2#

使用setNames

(my.slice = setNames(A[1,], colnames(A)))
es    one column     no      5 
 1      4      6      2      1 

class(my.slice)
[1] "numeric"

相关问题