May 2025
Intermediate to advanced
578 pages
8h 9m
Chinese
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
假设有一个记录月份的变量:
x1<-c("Dec","Apr","Jan","Mar")
使用字符串来记录这个变量有两个问题:
只有 12 个可能的月份,而且无法避免错别字:
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 Decsort(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 <NA> Mar#> Levels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
这似乎有风险,因此您可能需要使用 forcats::fct()来代替:
y2<-fct(x2,levels=month_levels)#> Error in `fct()`:#> ! All values of `x` must appear in `levels` or `na`#> ℹ Missing level: "Jam"
如果省略级别,则将按字母顺序从数据中提取:
factor(x1)#> [1] Dec Apr Jan Mar#> Levels: Apr Dec Jan Mar
按字母顺序排序略有风险,因为并非每台计算机都会以相同的方式对字符串进行排序。因此 forcats::fct()按首次出现排序:
fct(x1)#> [1] Dec Apr Jan Mar#> Levels: Dec Apr Jan Mar
如果您需要直接访问有效级别集,可以使用 ...
Read now
Unlock full access