2010-05-07 77 views
18
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相同?例如:R:我如何根據另一個排列矩陣,數據幀或向量的行

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

我試圖使用reorder函數:reorder(test1,test2)但我找不出正確的語法。我看到重新排序需要一個向量,我在這裏使用矩陣。我的真實數據有一​​個字符矢量,另一個作爲data.frame。我認爲數據結構對於上面的這個例子來說並不重要,我只需要語法幫助,並且可以將它適應於我真正的問題。

回答

19
test2 <- test2[rownames(test1),,drop=FALSE] 
+0

爲什麼這不是我的數據工作嗎?我想做test2 [match(test2 $ column,test1 $ column),1,drop = FALSE],因爲我匹配的是列的值而不是row.names – chimpsarehungry 2013-01-26 15:41:14

6

修復您的代碼後剪斷實際生成你的例子顯示了(提示:test1了名A,B,C,d,E,你的意思是一,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 
+0

爲什麼這對我的數據不起作用?我想做'test2 [match(test2 $ column,test1 $ column),1,drop = FALSE]'因爲我匹配的是列的值而不是row.names – chimpsarehungry 2013-01-26 15:38:49