让我们首先创建一些因素:
F1 <- factor(c(1,2,20,10,25,3))
F2 <- factor(paste0(F1, " years"))
F3 <- F2
levels(F3) <- paste0(sort(F1), " years")
F4 <- factor(paste0(F1, " years"), levels=paste0(sort(F1), " years"))
然后看看它们:
> F1
[1] 1 2 20 10 25 3
Levels: 1 2 3 10 20 25
> F2
[1] 1 years 2 years 20 years 10 years 25 years 3 years
Levels: 1 years 10 years 2 years 20 years 25 years 3 years
> F3
[1] 1 years 3 years 10 years 2 years 20 years 25 years
Levels: 1 years 2 years 3 years 10 years 20 years 25 years
> F4
[1] 1 years 2 years 20 years 10 years 25 years 3 years
Levels: 1 years 2 years 3 years 10 years 20 years 25 years
首先,我注意到 F2 中级别的“预期”顺序与 F1 不相似。看看factor
文档揭示了原因:级别是通过首先对输入进行排序来创建的。在 F2 的情况下,这些是字符串,其中排序考虑了长度(?)。
对我来说比较难理解的是F3和F4之间设置级别的区别。在 F3 中,我在创建因子后设置级别,而在 F4 中,我在创建因子时明确设置它们。在 F3 中,levels()
有人可以解释其中的区别吗?
F1
正如您自己发现的那样,使用数字排序。
F2
使用字典排序,首先比较第一个字符,使用第二个字符打破平局,依此类推,这就是为什么"10 years"
在。。。之间"1 years"
and "2 years"
.
F4
由字符向量创建,但具有可能因素的明确列表。因此,该列表将被获取(不排序)并用数字 1 到 6 进行标识。然后,将输入的每个项目与可能的级别集进行比较,并存储关联的数字。毕竟,因子只是一堆数字(as.numeric
将向您显示它们)与用于打印的级别列表相关联。所以F4
就像打印一样F2
,但其级别排序不同。
F3
是从 F2 创建的,因此它的级别最初是未排序的。该赋值仅替换级别名称集,而不替换向量中的数字。所以你可以将其视为renaming现有水平。如果你看一下这些数字,它们将与来自的数字相匹配F2
,而关联的名称,特别是名称的顺序,与来自的匹配F4
.
正如您的问题声称这不是纯粹的重新标签:是的,这是纯粹的重新标签,您获得F3
from F2
使用以下更改(在打印输出的两行中):
- 10 → 2
- 2 → 3
- 20 → 10
- 25 → 20
- 3 → 25
The str
函数也是查看因子内部表示的好工具。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)