我正在操纵我的数据,发现我在这个过程中的某些方面做错了。当我探讨该问题时,问题归结为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.显然,num按因子2的字母顺序排序(level1&gt; level10&gt; level2并且被放入宽格式。但是当它出现时,factor2标签保留的顺序与原始数据框中出现的顺序相同(level1&gt; level2&gt; level10)。
有人能解释为什么会发生这种情况(和/或我能找到相关信息的地方)吗?
答案 0 :(得分:9)
使用提供的数据,我得到了不同的结果:
> 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