2016-05-13 8 views
2

Ich habe einen Datenrahmen gegeben durchBestellen Sie einen Datenrahmen von Spaltenwerten mit R

x <- c(1,3,4,5,6,9,7,8,9,2,1) 
y <- c("A", "A", "B", "C", "C", "C","A", "B", "C", "C", "C") 

df <- data.frame(x,y) 

Ich mag es in Bezug Spalt y bestellen.

Ich habe so etwas wie

orderdf <- df[order(df$y),] 

und ich habe auf der y-Spalten

AAABBCCCCCC 

aber eigentlich will ich es von numerosity auch auf Bestellung so auf meine y Spalte Ich möchte erhalten

BBAAACCCCCC 

Wie kann ich es tun?

Außerdem würde ich auch zählen, wie viele (ich habe keine Ahnung von diesem) zu erhalten:

B 2 


A 3 


C 6 

Thank you!

Antwort

3

Dies sollte den Trick:

# construct count variable 
df$count <- ave(df$x, df$y, FUN=length) 
# order it up 
df[order(df$count, df$y),] 

Eine weitere nette Art und Weise zählt zu erhalten, wird mit table:

table(df$y)  
+0

Ich würde genau das gleiche posten Antwort: D (Du solltest nur das Minus vor df $ count entfernen;)) – digEmAll

+1

@digEmAll Die'Ave'-Funktion: Es ist ein Oldie, aber ein Leckerbissen. – lmo

+1

Ich habe das Minus in '-df $ count' entfernt, da es' '' ''' ergibt (d. H. Die umgekehrte Reihenfolge);) – digEmAll

0

Mit dplyr

library(dplyr) 
df %>% 
    group_by(y) %>% 
    mutate(count = n()) %>% 
    arrange(count, y) %>% 
    select(-count)