5

私は自分のデータを操作していて、プロセスのある時点で何か間違ったことをしたことに気付きました。問題を調査したところ、問題はパッケージ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 ラベルは元のデータ フレームに表示される順序と同じ順序を保持します (レベル 1 > レベル 2 > レベル 10)。

なぜこれが起こるのか(および/または関連情報を見つけることができる場所)を誰か説明できますか?

4

1 に答える 1

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
于 2014-10-06T17:59:17.023 に答える