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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。