2010-05-07 44 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 

Làm cách nào để sắp xếp lại test2 sao cho các hàng theo thứ tự như test1? ví dụ:R: Làm cách nào để sắp xếp lại các hàng của ma trận, data.frame hoặc véc tơ theo một hàng khác

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

Tôi đã cố gắng sử dụng chức năng sắp xếp lại với: sắp xếp lại (test1, test2) nhưng tôi không thể tìm ra cú pháp chính xác. Tôi thấy rằng sắp xếp lại có một vector, và tôi đang ở đây bằng cách sử dụng một ma trận. Dữ liệu thực của tôi có một vector ký tự và một dữ liệu khác dưới dạng data.frame. Tôi thấy rằng cấu trúc dữ liệu sẽ không quan trọng quá nhiều cho ví dụ trên, tôi chỉ cần trợ giúp với cú pháp và có thể điều chỉnh nó thành vấn đề thực sự của tôi.

Trả lời

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

Tại sao điều này không làm việc cho dữ liệu của tôi? Tôi muốn làm test2 [match (test2 $ cột, test1 $ cột), 1, drop = FALSE] vì những gì tôi đang khớp là giá trị của các cột không phải là row.names – chimpsarehungry

6

Sau khi sửa lỗi trong code snipped để thực sự tạo ra những gì ví dụ của bạn hiển thị (gợi ý: test1 có tên a, b, c, d, e; bạn có nghĩa là a, d, c, b, 1 vì nó cho thấy hiện nay), đây là dễ dàng hơn nhờ vào 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> 

Họ chìa khóa ở đây là match() làm những gì bạn muốn:

R> match(row.names(test2), row.names(test1)) 
[1] 5 2 3 4 1 
+0

Tại sao điều này không hoạt động cho dữ liệu của tôi? Tôi muốn làm 'test2 [match (cột test2 $, test1 $ cột), 1, drop = FALSE]' bởi vì những gì tôi đang khớp là giá trị của các cột không phải là row.names – chimpsarehungry

Các vấn đề liên quan