Ответ 1
test2 <- test2[rownames(test1),,drop=FALSE]
test1 <- as.matrix(c(1, 2, 3, 4, 5))
row.names(test1) <- c("a", "d", "c", "b", "e")
test2 <- as.matrix(c(6, 7, 8, 9, 10))
row.names(test2) <- c("e", "d", "c", "b", "a")
test1
[,1]
a 1
d 2
c 3
b 4
e 5
test2
[,1]
e 6
d 7
c 8
b 9
a 10
Как я могу переупорядочить test2, чтобы строки были в том же порядке, что и test1? например:
test2
[,1]
a 10
d 7
c 8
b 9
e 6
Я попытался использовать функцию переупорядочения с помощью: reorder (test1, test2), но я не мог понять правильный синтаксис. Я вижу, что переупорядочение принимает вектор, и я здесь использую матрицу. Мои реальные данные имеют один вектор символов, а другой - как data.frame. Я понял, что структура данных не слишком важна для этого примера выше, мне просто нужна помощь в синтаксисе и я могу адаптировать ее к моей реальной проблеме.
test2 <- test2[rownames(test1),,drop=FALSE]
После исправления кода, который был сфотографирован, чтобы фактически генерировать то, что показывает ваш пример (подсказка: test1
имела имена a, b, c, d, e; вы имели в виду a, d, c, b, 1, как показано на рисунке) это стало проще благодаря match()
:
R> test2[match(row.names(test2), row.names(test1)),1,drop=FALSE]
[,1]
a 10
d 7
c 8
b 9
e 6
R>
Они здесь, что match()
делает то, что вы хотите:
R> match(row.names(test2), row.names(test1))
[1] 5 2 3 4 1