我正在处理我的数据,发现在过程中的某个时刻做错了什么。当我研究此问​​题时,问题归结为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按factor2的字母顺序排序(level1> level10> level2),并放入宽格式。但如果是,factor2标签将保留与原始数据帧中显示的顺序相同的顺序(level1> level2> level10)。

谁能解释为什么会这样(和/或在哪里可以找到相关信息)?

最佳答案

使用提供的数据,我得到了不同的结果:

> 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

关于r - 提迪尔中的spread()如何处理因子水平,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26221752/

10-11 17:49