是否有一个函数可以将标题添加到矩阵中的第一列(行名称)?

问题描述 投票:0回答:2

我试图弄清楚如何获取这个矩阵并向包含行名称的列添加标签(因为使用 colnames 命令时这不被视为“列”)。

这是我的代码(df 和表名称是通用的,以避免识别我正在使用的包含敏感数据的数据集)。请注意,输出的左上角此时为空。我的目标是用“年”这个词填充那个空白。

#making sure labels are properly ordered
matrix1 <- as.matrix(table(df$yrsvar)[c("< 1", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "10+", "Don't Know")])

#columnnames
colnames(matrix1) <- (c("Percent"))

#making vertical, setting as percentages
as.matrix(prop.table(matrix1)) %>% '*' (100) %>% round(2)

输出:

           Percent
< 1          12.39
1             2.65
2             8.85
3             7.96
4             6.19
5             5.31
6             2.65
7             2.65
8             4.42
9             1.77
10            7.08
10+          36.28
Don't Know    1.77

我尝试使用 colnames 命令,但该列不被视为可以标记的列。

我尝试了一些通用解决方案,但都要求我将矩阵转换为我想避免的数据帧。作为矩阵保存在这里很重要。

r matrix
2个回答
2
投票

@thelatemail 应该已经发布,但我把 MCVE 记录下来:

mdat <- matrix(c(1,2,3, 11,12,13), 
nrow = 2, ncol = 3, byrow = TRUE, 
dimnames = list('rows'=c("row1", "row2"), 
                       c("C.1", "C.2", "C.3"))); mdat



#Naming both the rownames and the colnames
mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol = 3, byrow = TRUE,
               dimnames = list("rows"= c("row1", "row2"),
                               "cols"=c("C.1", "C.2", "C.3")))
mdat

我想我需要尝试创建一个函数来更改已存在的矩阵内的 rownames 对象的名称,但这应该不会太难。人们需要研究矩阵的属性部分。

对于现有矩阵

mdat
,可以使用它为
rownames
的“列”添加名称:

#Generalized for a multi-column matrix 
dimnames(mdat) <- list("Years" = rownames(mdat), dimnames(mdat)[[2]])
#---------
 mdat
      
Years  C.1 C.2 C.3
  row1   1   2   3
  row2  11  12  13

#--- the next succeeds but is not quite as elegant or complete
names( attributes(mdat)$dimnames ) <- list("rows", NULL)

#---
> mdat
      NULL
rows   C.1 C.2 C.3
  row1   1   2   3
  row2  11  12  13

0
投票

您可以使用

dimnames
names
的组合,如下所示:

mat <- matrix(sample(3), 3)
mat
     [,1]
[1,]    1
[2,]    3
[3,]    2

添加列名称:

colnames(mat) <- "numbers"
mat
     numbers
[1,]       1
[2,]       3
[3,]       2

添加行名称

rownames(mat) <- letters[1:3]
mat
  numbers
a       1
b       3
c       2

单独添加列标题

names(dimnames(mat))[2] <-"columns"
mat
   columns
NA  numbers
  a       1
  b       3
  c       2

单独添加行标题

names(dimnames(mat))[1] <- "rows"
mat
    columns
rows numbers
   a       1
   b       3
   c       2

同时更改标题:

names(dimnames(mat)) <- c("AA", "BB")
mat
   BB
AA  numbers
  a       1
  b       3
  c       2

等...

© www.soinside.com 2019 - 2024. All rights reserved.