Как изменить имена строк или столбцов матрицы по списку существующих имен на новые? - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть матрица, что это строки и столбцы, названные по некоторому идентификационному номеру.У меня есть другая база данных, которая содержит два столбца - один из идентификаторов и одно из нескольких имен.

Мне нужно изменить имя столбцов и строк в матрице на их имена в соответствии с тем, что у меня есть в другой базе данных.

Список идентификаторов и имен:

#   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

и то жеПринцип с рядами.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Это очень похоже на ответ Маркуса.

Я просто включаю также обновление имен строк (по запросу) и использую имена векторов для построения вектора поиска.

df <- data.frame(
  ID = 1:7,
  NAME = c('chocolate', 'hamburger', 'nudels', 'rice', 'sushi', 'ice cream', 'chicken'))

# Create a lookup vector from the IDs/Names dataframe
lookup <- df$NAME
names(lookup) <- df$ID

# Dummy matrix for illustration purposes
mat <- matrix(1:16, 4)
set.seed(1)
colnames(mat) <- sample(7, 4, FALSE)
rownames(mat) <- sample(7, 4, FALSE)
mat
#>   2 3  6  4
#> 2 1 5  9 13
#> 6 2 6 10 14
#> 5 3 7 11 15
#> 3 4 8 12 16

# Update colnames and rownames according to the lookup.
colnames(mat) <- lookup[colnames(mat)]
rownames(mat) <- lookup[rownames(mat)]
mat
#>           hamburger nudels ice cream rice
#> hamburger         1      5         9   13
#> ice cream         2      6        10   14
#> sushi             3      7        11   15
#> nudels            4      8        12   16
0 голосов
/ 03 февраля 2019

Учитывая следующую матрицу

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)

Но я не уверен из вопроса, хочет ли это ОП.

...