factor
位于 base
包(package)。 说明
函数 factor
用于将向量编码为因子(术语 ‘category’ 和“枚举类型”也用于因子)。如果参数 ordered
是 TRUE
,则假定因子级别已排序。为了与 S 兼容,还有一个函数 ordered
。
is.factor
、 is.ordered
、 as.factor
和 as.ordered
是这些类的成员函数和强制函数。
用法
factor(x = character(), levels, labels = levels,
exclude = NA, ordered = is.ordered(x), nmax = NA)
ordered(x = character(), ...)
is.factor(x)
is.ordered(x)
as.factor(x)
as.ordered(x)
addNA(x, ifany = FALSE)
.valid.factor(object)
参数
x |
数据向量,通常采用少量不同的值。 |
levels |
唯一值(作为字符串)的可选向量 |
labels |
级别标签的可选字符向量(删除 |
exclude |
形成水平集时要排除的值向量。这可能是与 |
ordered |
逻辑标志来确定级别是否应被视为有序(按给定的顺序)。 |
nmax |
级别数的上限;查看具体信息'。 |
... |
(在 |
ifany |
仅在使用时添加 |
object |
一个R对象。 |
细节
向量x
的类型不受限制;它只必须具有 as.character
方法并且可排序(通过 order
)。
有序因子与因子仅在类别上有所不同,但方法和模型拟合函数对这两个类别的处理方式却截然不同。
向量的编码如下。首先,exclude
中的所有值都从 levels
中删除。如果 x[i]
等于 levels[j]
,则结果的第 i
元素为 j
。如果在 levels
中未找到 x[i]
的匹配项(这对于排除的值会发生),则结果的第 i
元素将设置为 NA
。
通常,用作结果属性的 ‘levels’ 是删除 exclude
中的级别后减少的级别集,但这可以通过提供 labels
来更改。这应该是级别的一组新标签,或者是一个字符串,在这种情况下,级别是附加了序列号的字符串。
factor(x, exclude = NULL)
应用于没有的因子NA
s 是 no-operation,除非有未使用的级别:在这种情况下,将返回具有缩减级别集的因子。如果exclude
被使用,因为R3.4.0版本,排除不存在的字符级别相当于什么都不排除,并且当exclude
是一个character
向量,即是应用于水平x
。或者,exclude
可以是具有相同水平设置的因子x
并将排除中存在的水平exclude
.
因子的代码可能包含 NA
。对于数字 x
,设置 exclude = NULL
以使 NA
成为一个额外级别(打印为 <NA>
);默认情况下,这是最后一个级别。
如果NA
是一个级别,则将代码设置为缺失的方法(与缺失级别的代码相反)是在赋值的左侧使用is.na
(如is.na(f)[i] <- TRUE
中所示) ;is.na
内部的索引不起作用)。在这种情况下,缺失值当前打印为 <NA>
,即与 NA
级别的条目相同。
is.factor
是通用的:您可以编写方法来处理特定类的对象,请参阅 InternalMethods 。
如果未提供levels
,则调用unique
。由于因子通常具有相当少的级别,因此对于大型向量 x
,提供 nmax
作为唯一值数量的上限会很有帮助。
当使用c
将一个(可能有序的)因子与其他对象组合时,如果所有对象都是(可能有序的)因子,则结果将是一个具有级别的因子,即元素级别集的并集,按级别的顺序排列发生在元素的水平集中(这意味着如果所有元素具有相同的水平集,即结果的水平集),相当于unlist
对因子对象列表的操作。
值
factor
返回 "factor"
类的对象,该对象具有一组长度为 x
的整数代码,具有 character
模式的 "levels"
属性和唯一 ( !anyDuplicated(.)
) 条目。如果参数 ordered
为 true(或使用 ordered()
),则结果具有类 c("ordered", "factor")
。很长一段时间以来,factor(x)
丢失了除 "names"
之外的所有 attributes(x)
,并重置了 "levels"
和 "class"
。
将 factor
应用于有序或无序因子会返回一个仅包含出现级别的因子(相同类型):另请参阅 [.factor
以更透明的方式实现此目的。
is.factor
返回TRUE
或FALSE
,具体取决于其参数是否为因子类型。相应地,当 is.ordered
的参数是有序因子时,它返回 TRUE
,否则返回 FALSE
。
as.factor
将其参数强制为一个因子。它是 factor
的缩写形式(有时更快)。
如果已排序,as.ordered(x)
返回x
,否则返回ordered(x)
。
addNA
通过将 NA
转换为额外级别来修改因子(例如,以便将 NA
值计入表中)。
.valid.factor(object)
检查一个因子的有效性,目前只有levels(object)
,如果有效则返回TRUE
,否则返回说明有效性问题的字符串。该函数用于validObject(<factor>)
。
警告
因子的解释取决于代码和 "levels"
属性。仅小心比较具有相同水平集(以相同顺序)的因子。特别是,应用于因子的 as.numeric
是没有意义的,并且可能通过隐式强制转换发生。要将因子 f
转换为近似其原始数值,建议使用 as.numeric(levels(f))[f]
,它比 as.numeric(as.character(f))
效率稍高。
默认情况下,因子的级别已排序,但排序顺序很可能取决于创建时的区域设置,并且不应假定为 ASCII。
有一些异常与具有 NA
级别的因子相关。建议谨慎使用它们,例如仅用于制表目的。
比较运算符和组泛型方法
group generic Ops
有 "factor"
和 "ordered"
方法,它们为 Comparison 运算符以及 Summary
中的 min
、 max
和 range
泛型提供方法的 "ordered"
。 (其余组和 Math
组会生成错误,因为它们对因子没有意义。)
只有 ==
和 !=
可用于因子:一个因子只能与具有相同级别集(不一定具有相同顺序)的另一个因子或字符向量进行比较。有序因子以相同的方式进行比较,但一般调度机制不允许比较有序因子和无序因素。
所有比较运算符都可用于有序因子。排序规则是通过操作数的级别完成的:如果两个操作数都是有序因子,则它们必须具有相同的级别集。
注意
在早期版本中R,如果重复的比例很小,则将字符数据存储为一个因子会更节省空间。然而,相同的字符串现在共享存储,因此在大多数情况下差异很小。 (整数值存储在 4 个字节中,而每个对字符串的引用需要 4 或 8 个字节的指针。)
例子
(ff <- factor(substring("statistics", 1:10, 1:10), levels = letters))
as.integer(ff) # the internal codes
(f. <- factor(ff)) # drops the levels that do not occur
ff[, drop = TRUE] # the same, more transparently
factor(letters[1:20], labels = "letter")
class(ordered(4:1)) # "ordered", inheriting from "factor"
z <- factor(LETTERS[3:1], ordered = TRUE)
## and "relational" methods work:
stopifnot(sort(z)[c(1,3)] == range(z), min(z) < max(z))
## suppose you want "NA" as a level, and to allow missing values.
(x <- factor(c(1, 2, NA), exclude = NULL))
is.na(x)[2] <- TRUE
x # [1] 1 <NA> <NA>
is.na(x)
# [1] FALSE TRUE FALSE
## More rational, since R 3.4.0 :
factor(c(1:2, NA), exclude = "" ) # keeps <NA> , as
factor(c(1:2, NA), exclude = NULL) # always did
## exclude = <character>
z # ordered levels 'A < B < C'
factor(z, exclude = "C") # does exclude
factor(z, exclude = "B") # ditto
## Now, labels maybe duplicated:
## factor() with duplicated labels allowing to "merge levels"
x <- c("Man", "Male", "Man", "Lady", "Female")
## Map from 4 different values to only two levels:
(xf <- factor(x, levels = c("Male", "Man" , "Lady", "Female"),
labels = c("Male", "Male", "Female", "Female")))
#> [1] Male Male Male Female Female
#> Levels: Male Female
## Using addNA()
Month <- airquality$Month
table(addNA(Month))
table(addNA(Month, ifany = TRUE))
参考
Chambers, J. M. and Hastie, T. J. (1992) Statistical Models in S. Wadsworth & Brooks/Cole.
也可以看看
[.factor
用于因子子集。
gl
用于构建平衡因子,C
用于具有指定对比的因子。 levels
和nlevels
用于访问级别,unclass
用于获取整数代码。
相关用法
- R file.path 构造文件路径
- R formals 访问和操纵形式参数
- R funprog 函数式编程语言中常见的高阶函数
- R findInterval 查找区间数或索引
- R formatDL 格式说明列表
- R force 强制评估论证
- R file.info 提取文件信息
- R format 以通用格式编码
- R file.show 显示一个或多个文本文件
- R function 函数定义
- R formatC 使用 C 样式格式进行格式化
- R file.access 确定文件的可访问性
- R format.pval 设置 P 值格式
- R files 文件操作
- R file.choose 交互式选择文件
- R files2 目录和文件权限的操作
- R forceAndCall 调用带有强制参数的函数
- R format.info 格式(.)信息
- R find.package 查找套餐
- R grep 模式匹配和替换
- R getwd 获取或设置工作目录
- R vector 向量 - 创建、强制等
- R lapply 对列表或向量应用函数
- R dump R 对象的文本表示
- R Sys.getenv 获取环境变量
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Factors。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。