2012-04-25 12 views
14

Ho la seguente data.frame in R:livelli di fattore di riordino per i giorni della settimana in R

> daily 
     DoW   Duration 
1 Friday 14.0000000000000 
2 Monday 21.0000000000000 
3 Saturday 12.0000000000000 
4 Thursday 28.0000000000000 
5 Tuesday 12.0000000000000 
6 Wednesday 91.0000000000000 
7 Sunday 20.0000000000000 

mi piacerebbe cambiare l'ordine dei livelli dei fattori in modo che le settimane sono in (US) ordine del giorno della settimana.

Sembra che posso farlo in modo lento e sconcertante con relevel(). Ma questo prende solo 1 argomento numerico e lo sposta in alto. Quindi, relevel(daily$DoW, 7), si sposta in cima alla domenica, ma il resto rimane non ordinato (il che significa che ho bisogno di rilevarlo in ordine inverso).

Doable, ma ci deve essere un modo migliore, giusto?

(. Soluzione serie temporali anche accettabile)

risposta

18

È necessario specificare i livelli di fattore e quindi utilizzare order con indicizzazione:

daily$DoW <- factor(daily$DoW, levels= c("Sunday", "Monday", 
    "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")) 

daily[order(daily$DoW), ] 
+3

Ho controllato per vedere se R ha una costante di giorni della settimana incorporata come fa mesi e non sembra. Pensato sarebbe. –

+1

Questo ha quasi funzionato --- Ho implementato la riga finale come un compito, 'daily <- daily [order (daily $ DoW),' 'Ma lo noto quando faccio un istogramma con' ggplot (daily, aes (x = DoW, y = Duration)) + geom_histogram() ', i fattori sono elencati nell'ordine corretto sull'asse x, ma non sull'asse y --- cioè, i valori y corrispondono ancora al vecchio posizioni dei valori x. cioè, domenica è 14, invece di 20. – Mittenchops

+0

Sì, forse il mio compito non era corretto, ma quando digito semplicemente 'giornalmente' ora, l'indice è ancora elencato come' 7,2,5,6,4,1,3' , anche se la colonna DoW inizia ora con la domenica. – Mittenchops

1

Invece di un factor, ciò che si vuole è un Ordered.Factor.

Questa riga di codice R converte la variabile DoW a un "Fattore ordinato":

daily$DoW <- ordered(daily$DoW, levels=c("Monday", "Tuesday", "Wednesday", "Thursday", 
"Friday", "Saturday", "Sunday")) 

Ora, quando si utilizza table, plot o altre funzioni Dow esso sarà l'ordine specificato sopra.

Problemi correlati