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