2011-07-20 35 views
14

Bir veri çerçevesinin satırlarını iki faktörle yeniden sıralamaya çalışıyorum. İlk faktör için varsayılan sipariş ile mutluyum. İkinci faktör için kendi özel siparişimi satırlara vermek istiyorum. Bu denedimİki çerçeveye göre veri çerçevesini sipariş verin R

appleOrdered <- c("E", "D", "J", "A", "F", "G", "I", "B", "H", "C") 

:

dat <- data.frame(apple=rep(LETTERS[1:10], 3), 
        orange=c(rep("agg", 10), rep("org", 10), rep("fut", 10)), 
        pear=rnorm(30, 10), 
        grape=rnorm(30, 10)) 

Ben belirli bir şekilde "elma" sipariş etmek istiyorum: İşte bazı kukla veri var

dat <- dat[with(dat, order(orange, rep(appleOrdered, 3))), ] 

Ama görünüyor "elmayı" rastgele bir sıraya koy. Baska öneri? Teşekkürler.

+0

İlişkin [Bir çeşit bir vektör tabanlı nasıl başka bir değer üzerinde] (http://stackoverflow.com/questions/1568511/how-do-i-sort-one-vector-based-on-values-of-another) –

cevap

10

faktör seviyelerini yeniden düzenleme:

dat[with(dat, order(orange, as.integer(factor(apple, appleOrdered)))), ] 
+1

Bu harika çalışıyor, teşekkürler. Faktör çağrısını as.integer() içine sarmanın bir nedeni var mı? Çıkarma, tam olarak aynı sonucu veriyor gibi görünüyor. – Steve

+0

Sesler buluyor - Faktör sıralama sırası, düzeyler veya as.character() tarafından tanımlanmışsa pozitif değildim. – Charles

11

plyr istenen sırayla düzeyleri ve arrange fonksiyonu ile bir faktör kullanmayı deneyin:

dat$apple <- factor(dat$apple,levels=appleOrdered) 
arrange(dat,orange,apple) 
+0

Bu harika çalışıyor, teşekkürler. – Steve

+0

, 'order = TRUE' gerekmez. –

İlgili konular