今天看啥  ›  专栏  ›  DumplingLucky

学习tidyverse - Factors(1)

DumplingLucky  · 简书  ·  · 2021-05-26 14:44

在R中,因子用于处理类别变量,即具有固定和已知的可能值集的变量。 当要以非字母顺序显示字符向量时,它们也很有用。

library(tidyverse)

1. Creating factors

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  <NA> Mar 
#> Levels: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

如果需要警告,可以使用 readr :: parse_factor()

y2 <- parse_factor(x2, levels = month_levels)
#> Warning: 1 parsing failure.
#> row col           expected actual
#>   3  -- value in level set    Jam

如果省略这些级别,则它们将按字母顺序从数据中获取:

factor(x1)
#> [1] Dec Apr Jan Mar
#> Levels: Apr Dec Jan Mar

有时,希望级别的顺序与数据中首次出现的顺序相匹配。 在创建因子时,可以通过将级别设置为unique(x)或事后使用fct_inorder()来做到这一点:

f1 <- factor(x1, levels = unique(x1))
f1
#> [1] Dec Apr Jan Mar
#> Levels: Dec Apr Jan Mar

f2 <- x1 %>% factor() %>% fct_inorder()
f2
#> [1] Dec Apr Jan Mar
#> Levels: Dec Apr Jan Mar

如果需要直接访问一组有效级别,则可以使用level()进行访问:

levels(f2)
#> [1] "Dec" "Apr" "Jan" "Mar"

参考: https://r4ds.had.co.nz/factors.html




原文地址:访问原文地址
快照地址: 访问文章快照