как spread () в tidyr обрабатывает уровни факторов
Я манипулировал своими данными и обнаружил, что в какой-то момент сделал что-то не так. Когда я исследовал эту проблему, проблема свелась к следующему поведению spread()
в пакете tidyr
.
> 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
Что я хотел сделать, так это преобразовать этот длинноформатный фрейм данных в широкий формат. И я подумал, что spread()
- это путь. Результат, однако, был не тот, что я ожидал. ожидаемый.
> spread(d, factor2, num)
factor1 level1 level2 level10
1 A 1 3 2
2 B 4 6 5
3 C 7 9 8
Если factor1 - "A", а factor2 - "level2", то значение должно быть равно 2, но полученный широкий формат говорит 3. По-видимому, число упорядочено по алфавитному порядку factor2 (level1 > level10 > level2) и помещено в широкий формат. Но когда это так, метки factor2 сохраняют тот же порядок, что и в исходном фрейме данных (level1 > level2 > level10).
Может ли кто-нибудь объяснить, почему это происходит (и/или где я могу найти соответствующую информацию)?