创建因子
假设你有一个记录月份的变量:
x1 <- c("Dec", "Apr", "Jan", "Mar")
使用字符串来记录这个变量有两个问题:
-
- 一年只有十二个可能的月份,而且没有任何机制防止拼写错误:x2 <- c("Dec", "Apr", "Jam", "Mar")
-
- 它不能以有用的方式排序:
sort(x1) #> [1] "Apr" "Dec" "Jan" "Mar"
你可以用因子来解决这两个问题。要创建一个因子,必须先创建一个有效水平的列表:
month_levels <- c( "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" )
现在你可以创建一个因子:
y1 <- factor(x1, levels = month_levels) y1 #> [1] Dec Apr Jan Mar #> Levels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec sort(y1) #> [1] Jan Mar Apr Dec #> Levels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
任何不在该集合中的值都会被静默转换为 NA:
y2 <- factor(x2, levels = month_levels) y2 #> [1] Dec Apr
如果你希望得到一个错误,可以使用 readr::parse_factor():
y2 <- parse_factor(x2, levels = month_levels) #> Warning: 1 parsing failure. #> row col expected actual #> 3 -- value in level set Jam
如果省略 levels,它们将按字母顺序从数据中获取: