2011-09-13 35 views
8

Tôi muốn kết hợp ba cột trong một trong các tập dữ liệu của tôi thành một cột có tên biến "al_anim" và xóa bất kỳ trùng lặp nào, xếp hạng các giá trị (id động) từ thấp nhất đến cao nhất, và đánh số lại từng con vật từ 1 đến N dưới tên biến "new_id".Sắp xếp lại nhiều cột trong tập dữ liệu thành một cột bằng cách sử dụng R

anim1 <- c(1456,2569,5489,1456,4587) 
anim2 <- c(6531,6987,6987,15487,6531) 
anim3 <- c(4587,6548,7894,3215,8542) 
mydf <- data.frame(anim1,anim2,anim3) 

Mọi trợ giúp sẽ được đánh giá rất nhiều!

Baz

Trả lời

14

Sử dụng mydf từ ví dụ của bạn:

mydf <- data.frame(anim1, anim2, anim3) 

Ngăn xếp dữ liệu:

sdf <- stack(mydf) 

Sau đó tính toán các yếu tố độc đáo sử dụng unique()

uni <- unique(sdf[, "values"]) 

và sau đó điều này sẽ làm cho họ một id vật mới

new_id <- as.numeric(as.factor(sort(uni))) 

mà sẽ cung cấp cho:

> new_id 
[1] 1 2 3 4 5 6 7 8 9 10 11 

Tuy nhiên đó là hoàn toàn không đáng kể; seq_along(uni) giúp bạn dễ dàng hơn nhiều. Vì vậy, tôi tự hỏi, nếu bạn muốn

newdf <- data.frame(anim = sort(uni), new_id = seq_along(uni)) 
merge(sdf, newdf, by.x = "values", by.y = "anim") 

mang đến cho:

> merge(sdf, newdf, by.x = "values", by.y = "anim") 
    values ind new_id 
1 1456 anim1  1 
2 1456 anim1  1 
3 2569 anim1  2 
4 3215 anim3  3 
5 4587 anim1  4 
6 4587 anim3  4 
7 5489 anim1  5 
8 6531 anim2  6 
9 6531 anim2  6 
10 6548 anim3  7 
11 6987 anim2  8 
12 6987 anim2  8 
13 7894 anim3  9 
14 8542 anim3  10 
15 15487 anim2  11 

Có một số lượng không rõ ràng trong câu hỏi của bạn mà có thể khắc phục bằng cách đưa ra một kết quả dự kiến ​​/ đầu ra.

+0

Cảm ơn sự giúp đỡ và gợi ý của bạn. Tôi sẽ cải thiện vào lần sau! Cảm ơn một lần nữa! – baz

+0

@baz Tôi có nhận được quyền này không? Nó khá hữu ích? –

+0

Ồ vâng! .... rất hữu ích và nó đã cho tôi những gì tôi cần. Cảm ơn rất nhiều! – baz

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