因子在R語言中可以用來表示名義型變量或有序變量。名義變量一般表示類别,如性别,種族等等。有序變量是有一定排序順序的變量,如職稱,年級等等。在R語言中,名義變量和有序變量可以使用因子來表示。
創建因子在R語言中可以使用factor()函數和gl()函數來創建因子變量。
(1)使用factor()函數
factor()函數的語法格式為:
f <- factor(x=charactor(), levels, labels=levels, exclude = NA, ordered = is.ordered(x), namax = NA)
其中:
x 為創建因子的數據,是一個向量;
levels:因子數據的水平,默認是x中不重複的值;
labels:标識某水平的名稱,與水平一一對應,以方便識别,默認取levels的值;
exclude:從x中剔除的水平值,默認為NA值;
ordered:邏輯值,因子水平是否有順序(編碼次序),若有取TRUE,否則取FALSE;
nmax:水平個數的限制。
下面給出幾個具體的例子來說明具體使用方法:
fc1 <- factor(c(1, 2, 3, 3, 1, 2, 2, 3, 1, 3, 2, 1))
fc2 <- factor(rep(1:3, times = 2), labels = c("A", "B", "C"))
grade <- c("Freshman", "Sophomore", "Junior", "Senior")
fc3 <- factor(grade, ordered = TRUE) #對于字符型向量,因子的水平默認依字母順序創建
fc4 <- factor(grade, ordered = TRUE, levels = c("Freshman", "Sophomore", "Junior", "Senior")) #指定levels,則按levels中的順序定義數值
本部分執行情況如下圖所示:
使用factor函數創建因子
(2)使用gl()函數
gl()函數用于定義有規律的因子向量,其語法格式如下:
gl(n, k, length = n*k, labels = 1:n, ordered = FALSE)
其中參數的含義如下:
n: 正整數,表示因子的水平個數
k:正整數,表示每個水平重複的次數;
length: 正整數,表示因子向量的長度,默認為n*k
labels: 表示因子水平的名稱,默認值為1:n
ordered: 邏輯變量,表示因子水平是否是有次序的,默認值為FALSE
g1 <- gl(3, 3) # 1 1 1 2 2 2 3 3 3
g2 <- gl(3, 3, 5) # 1 1 1 2 2
g3 <- gl(3, 2, labels = c('A', 'B', 'C')) # A A B B C C
本部分的結果情形如下圖所示:
使用gl函數創建因子
因子的索引fc1[1] #訪問輸出第一個水平
fc1[1:3] #訪問輸出1~3個水平
fc1[c(1, 4, 7)] #訪問輸出第1,4,7個水平值
fc1[-1] #排除第一個
fc1[-c(1:4)] #排除第1~4個
fc1[fc1 != 1] #過濾掉等于1的因子水平
fc3[fc3 > 'Junior'] #對于有序因子可以使用>,>=,<,<=,!=,==;而非有序因子,隻可以使用!=和==
注意:因為因子一般表示名義變量或有序變量,如非有序因子,則使用>,>=,<,<=比較大小是沒有意義的。
本部分執行情況如下圖所示:
因子索引
因子的修改fc1[1] <- 3 #注意,修改的值必須在原有的水平中
fc1[1:3] <- 2 #将1~3個水平值改為2
fc1[-1] <- 3 #将除第1個水平之外的其它水平值修改為3
fc1[-c(1,4,7)] <-1 #将除第1,4,7個水平之外的值修改為1
執行情況如下:
因子的修改
歡迎關注本号,本号近期持續更新R語言的内容。從簡入深,從基本語法到實際的數據分析應用。
,