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