3

假设我有一个矩阵,

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

我丢失了列名,两者实际上都是数字类。

有没有办法做 as.vector 并保留列名?或者更一般地,将矩阵切片为具有名称(my.slice)= colnames(A)的数值类向量?

注意(小故事)。 当我将默认设置为 drop=FALSE 时,这一切都开始了。然后,当我对矩阵进行切片时,我需要使用 as.vector,但遗憾的是,现在我丢失了 my.slice 中元素的名称。

4

2 回答 2

3

您可以将矩阵转换为数据框,对其进行切片,并使用unlist将切片制作成命名向量:

B <- as.data.frame(A)

my.slice <- unlist(B[1,])

只要列名不包含奇怪字符,此方法就有效:数据框的列名在语法上必须作为变量名是可接受的,因此它们不能以数字或标点符号开头。

于 2016-02-11T07:12:45.937 回答
2

使用setNames

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

class(my.slice)
[1] "numeric"
于 2017-01-17T10:42:18.870 回答