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

行が test1 と同じ順序になるように、test2 を並べ替えるにはどうすればよいですか? 例えば

 test2
  [,1]
a    10
d    7
c    8
b    9
e    6

reorder (test1, test2) で reorder 関数を使用しようとしましたが、正しい構文を理解できませんでした。並べ替えにはベクトルが必要で、ここでは行列を使用しています。私の実際のデータには、1 つの文字ベクトルと data.frame としての別のベクトルがあります。上記の例では、データ構造はあまり重要ではないと考えました。構文に関する助けが必要なだけで、それを実際の問題に適応させることができます。

4

2 に答える 2

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

例に示すものを実際に生成するように切り取ったコードを修正した後 (ヒント: test1a、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 に答える