Получить заголовок для матрицы в определенном порядке из другой матрицы - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу иметь матрицу с заголовком.Я генерирую матрицу следующим образом

res.var <- matrix(nrow = 2, ncol = 4)
res.var <- as.data.frame(res.var)

Я хочу получить имена столбцов из другого фрейма данных в определенном порядке.Я получаю порядок имен столбцов из другого фрейма данных.

Имена столбцов

column.names <- c("a", "b", "c", "d", "e")
column.names <- as.data.frame(column.names)

Порядок / позиция

position.vec <- c(3, 4, 5, 2)
position.vec <- as.data.frame(position.vec)

Я пытаюсь подключитьсядве матрицы следующим образом:

j <- 1
l <- 4

while (j <= l) {
  names(res.var)[j] <- column.names[position.vec[j, 1], ]
  j <- j + 1
}

Кто-нибудь знает, где моя ошибка?

В результате я ожидаю таблицу, подобную этой

resulting.table <- matrix(nrow = 2, ncol = 4)
resulting.table <- as.data.frame(resulting.table)
names(resulting.table) <- c("c", "d", "e", "b")

Кроме того, есть лиЕсть ли способ сделать это без цикла?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Я предлагаю следующий код, чтобы избавиться от цикла и получить значения из диапазона "ae" в качестве имен столбцов.Приятно то, что вы можете просто передать свой «вектор заказа» (position.vec) в виде индексов в столбец, содержащий имена заголовков.

res.var <- matrix(nrow = 2, ncol = 4)
res.var <- as.data.frame(res.var)

column.names <- c("a", "b", "c", "d", "e")
column.names <- as.data.frame(column.names)

position.vec <- c(3, 4, 5, 2)

names(res.var) <- column.names[position.vec,1]

Если вы также хотите / хотите, чтобы позиции приходили изdata.frame, то вам нужно изменить последние 2 строки в коде:

position.vec <- c(3, 4, 5, 2)
position.vec <- as.data.frame(position.vec)

names(res.var) <- column.names[position.vec[,1],1]
0 голосов
/ 25 сентября 2018

Мы можем использовать setnames для присвоения имен res.var путем извлечения column.names в соответствии с position.vec

setNames(res.var, column.names[position.vec$position.vec,])

#   c  d  e  b
#1 NA NA NA NA
#2 NA NA NA NA

Если мы решим сохранить column.names и position.vecкак вектор

res.var <- matrix(nrow = 2, ncol = 4)
res.var <- as.data.frame(res.var)
column.names <- c("a", "b", "c", "d", "e")
position.vec <- c(3, 4, 5, 2)

Вместо этого мы можем сделать

names(res.var) <- column.names[position.vec]

, и если мы хотим сохранить их как фрейм данных, мы можем сделать

names(res.var) <- column.names[position.vec$position.vec,]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...