r - 如何通过现有名称列表将矩阵行或列名称更改为新名称?

标签 r database matrix names

我有一个矩阵,它的行和列由一些 ID 号命名。 我有另一个数据库,其中包含两列 - 一列 ID 和一列名称。

我需要根据我在其他数据库中的名称将矩阵中的列和行的名称更改为它的名称。

ID 和名称列表:

#   ID  NAME  
#    1   chocolate   
#    2   hamburger   
#    3   nudels
#    4   rice  
#    5   sushi 
#    6   ice cream   
#    7   chicken  

我的矩阵:

#headline:  1   3   6  7
#           x   x   x  x
#           x   x   x  x
#           x   x   x  x
#           x   x   x  x

我想要的:

#headline:  chocolate   nudels   ice cream  chicken
#           x           x        x          x
#           x           x        x          x
#           x           x        x          x
#           x           x        x          x

和行一样的原理。

最佳答案

给定以下矩阵

mat <- matrix(1:16, 4)
set.seed(1)
colnames(mat) <- sample(9, 4, FALSE)
mat
#     3 9  5  6
#[1,] 1 5  9 13
#[2,] 2 6 10 14
#[3,] 3 7 11 15
#[4,] 4 8 12 16

和这个查找表

(lookup <- data.frame(ID = 1:10,
                      NAME = LETTERS[1:10], stringsAsFactors = FALSE))
#    ID NAME
#1    1    A
#2    2    B
#3    3    C
#4    4    D
#5    5    E
#6    6    F
#7    7    G
#8    8    H
#9    9    I
#10  10    J

我们可以使用match(colnames(mat), lookup$ID)查找旧列名的位置并使用此向量对列 NAME 进行子集化从查找表

colnames(mat) <- lookup$NAME[match(colnames(mat), lookup$ID)]
mat
#     C I  E  F
#[1,] 1 5  9 13
#[2,] 2 6 10 14
#[3,] 3 7 11 15
#[4,] 4 8 12 16 

如果我们需要将行名和列名更改为相同,我们可以使用`dimnames<-`如下

dimnames(mat) <- rep(list(lookup$NAME[match(colnames(mat), lookup$ID)]), 2)

但我不确定这是否是 OP 想要的问题。

关于r - 如何通过现有名称列表将矩阵行或列名称更改为新名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54506184/

相关文章:

java - 分布式数据结构的 Hazelcast 配置

c++ - 欧拉旋转应该存储为三个矩阵还是一个矩阵?

java - Java 中基于枚举的表/矩阵

R代码执行错误

r - 展开 data.frame/table

mysql - 从大型数据库中删除数据

mysql - 如何使mysql中的两列在一张表中的值为0/1时唯一?

通过反向替换求解 Ax = b 的 Python 函数

r - 如何在 R 中同时使用统计函数和子集数据?

r - 从重复表中创建 id 变量