Как 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
Другие вопросы по тегам