gpt4 book ai didi

r - tidyr 中的 spread() 如何处理因子水平

转载 作者:行者123 更新时间:2023-12-04 10:08:46 25 4
gpt4 key购买 nike

我在操纵我的数据时发现我在这个过程中的某个时候做错了。当我探索这个问题时,问题归结为 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)。

谁能解释为什么会发生这种情况(和/或我可以在哪里找到相关信息)?

最佳答案

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

> 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 - tidyr 中的 spread() 如何处理因子水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26221752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com