我有一个矩阵,它的行和列由一些 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/