20
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 函数: reorder (test1, test2) 但我无法找出正确的语法。我看到重新排序需要一个向量,而我在这里使用矩阵。我的真实数据有一​​个字符向量和另一个作为 data.frame。我认为对于上面的这个例子来说,数据结构并不重要,我只需要语法方面的帮助,并且可以使其适应我的实际问题。

4

2 回答 2

20
test2 <- test2[rownames(test1),,drop=FALSE]
于 2010-05-07T03:57:05.653 回答
7

在修复了您的代码被剪断以实际生成示例显示的内容后(提示: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
于 2010-05-07T03:57:39.230 回答