Stavo manipolando i miei dati e ho scoperto che ho fatto qualcosa di sbagliato in qualche punto del processo. Quando ho esplorato il problema, il problema si è verificato nel seguente comportamento di spread()
nel pacchetto tidyr
.come spread() in tidyr gestisce i livelli di fattore
Ecco un esempio dimostrativo. Diciamo che abbiamo una cornice dati come la seguente.
> d <- data.frame(factor1 = rep(LETTERS[1:3], each = 3),
+ factor2 = rep(paste0("level", c(1, 2, 10)), 3),
+ num = 1:9
+)
> d
factor1 factor2 num
1 A level1 1
2 A level2 2
3 A level10 3
4 B level1 4
5 B level2 5
6 B level10 6
7 C level1 7
8 C level2 8
9 C level10 9
Quello che volevo fare era convertire questo frame di dati con formattazione lunga in formato wide. E ho pensato che spread()
è una strada da percorrere. Il risultato, tuttavia, non era quello che mi aspettavo.
> spread(d, factor2, num)
factor1 level1 level2 level10
1 A 1 3 2
2 B 4 6 5
3 C 7 9 8
Se factor1 è "A" e factor2 è "Level2", il valore dovrebbe essere di 2, ma il grande formato risultante dice 3. A quanto pare, il num è ordinato per ordine alfabetico factor2 (level1> level10 > level2) e viene inserito nel formato wide. Ma quando lo è, le etichette factor2 mantengono lo stesso ordine in cui appaiono nel frame di dati originale (livello1> livello2> livello10).
Qualcuno potrebbe spiegare perché questo accade (e/o dove posso trovare informazioni rilevanti)?
Utilizzando la versione devel di 'tidyr', i colnames corrispondono ai numeri, ma l'ordine delle colonne è' level1, level10, level2'. Anche questo sembra essere risolto da 'd $ factor2 <- factor (d $ factor2, levels = c ('level1', 'level2', 'level10')); spread (d, factor2, num) ' – akrun
Ho' tidyr' versione 0.1 e ho ottenuto il risultato corretto usando il tuo codice. Forse dovresti riavviare R e vedere se questo cambia le cose? –
Sembra che stavo usando la versione di sviluppo. Quando ho installato quello corrente da CRAN, ha funzionato bene. Grazie a @akrun per averlo indicato. –