2011-09-13 24 views
8

kullanarak tek bir sütuna yeniden düzenleyin. Veri kümelerimden birinde üç sütunu "al_anim" değişken adında biriyle birleştirmek ve herhangi bir kopyasını kaldırmak istiyorum, değerleri sırala (hayvan kimlikleri) sırala En düşükten en yükseğe, ve "new_id" değişken adı altında her bir hayvanı 1'den N'ye yeniden numaralandırın.Veri kümesindeki birden çok sütunu 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) 

Herhangi bir yardım çok takdir edilecektir!

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

Yığın veriler:: En örnekten mydf kullanma

Baz

cevap

14

sdf <- stack(mydf) 

Sonra benzersiz öğeleri hesaplamak kullanarak unique()

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

ve sonra bu onlara verecek yeni bir hayvan kimliği

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

alacak:

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

bu tamamen önemsiz Ancak; seq_along(uni) sizi çok daha kolay bir şekilde bulur. beklenen bir sonuçtur/çıkış vererek hafifletilebilir olabilir sizin Soru belirsizlik bir miktar vardır

> 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 

: Ben veren sen

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

istiyorsanız ediyorum.

+0

Yardımlarınız ve önerileriniz için teşekkür ederiz. Bir dahaki sefere iyileşeceğim! Tekrar teşekkürler! – baz

+0

@baz Bunu doğru mu yaptım? Yararlı mı –

+0

Oh evet! .... çok yararlı ve bana ihtiyacım olan şeyi verdi. Çok teşekkürler! – baz

İlgili konular