当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R recipes step_num2factor 将数字转换为因数


step_num2factor() 会将一个或多个数值向量转换为因子(有序或无序)。当类别被编码为整数时,这非常有用。

用法

step_num2factor(
  recipe,
  ...,
  role = NA,
  transform = function(x) x,
  trained = FALSE,
  levels,
  ordered = FALSE,
  skip = FALSE,
  id = rand_id("num2factor")
)

参数

recipe

一个菜谱对象。该步骤将添加到此配方的操作序列中。

...

一个或多个选择器函数用于为此步骤选择变量。有关更多详细信息,请参阅selections()

role

由于没有创建新变量,因此此步骤未使用。

transform

采用单个参数 x 的函数,可用于在确定级别之前修改数值(可能使用 base::as.integer() )。函数的输出应该是一个整数,对应于应分配的 levels 的值。如果不是整数,该值将在 bake() 期间转换为整数。

trained

指示预处理数量是否已估计的逻辑。

levels

将用作级别的值的字符向量。这些是转换为字符并排序的数字数据。一旦执行prep(),就会修改此值。

ordered

单个逻辑值;应该对因子进行排序吗?

skip

一个合乎逻辑的。当bake() 烘焙食谱时是否应该跳过此步骤?虽然所有操作都是在 prep() 运行时烘焙的,但某些操作可能无法对新数据进行(例如处理结果变量)。使用skip = TRUE时应小心,因为它可能会影响后续操作的计算。

id

该步骤特有的字符串,用于标识它。

recipe 的更新版本,将新步骤添加到任何现有操作的序列中。

整理

当您 tidy() 此步骤时,将返回包含列 terms(选定的选择器或变量)和 ordered 的 tibble。

箱重

底层操作不允许使用案例权重。

例子

library(dplyr)
data(attrition, package = "modeldata")

attrition %>%
  group_by(StockOptionLevel) %>%
  count()
#> # A tibble: 4 × 2
#> # Groups:   StockOptionLevel [4]
#>   StockOptionLevel     n
#>              <int> <int>
#> 1                0   631
#> 2                1   596
#> 3                2   158
#> 4                3    85

amnt <- c("nothin", "meh", "some", "copious")

rec <-
  recipe(Attrition ~ StockOptionLevel, data = attrition) %>%
  step_num2factor(
    StockOptionLevel,
    transform = function(x) x + 1,
    levels = amnt
  )

encoded <- rec %>%
  prep() %>%
  bake(new_data = NULL)

table(encoded$StockOptionLevel, attrition$StockOptionLevel)
#>          
#>             0   1   2   3
#>   nothin  631   0   0   0
#>   meh       0 596   0   0
#>   some      0   0 158   0
#>   copious   0   0   0  85


# an example for binning

binner <- function(x) {
  x <- cut(x, breaks = 1000 * c(0, 5, 10, 20), include.lowest = TRUE)
  # now return the group number
  as.numeric(x)
}

inc <- c("low", "med", "high")

rec <-
  recipe(Attrition ~ MonthlyIncome, data = attrition) %>%
  step_num2factor(
    MonthlyIncome,
    transform = binner,
    levels = inc,
    ordered = TRUE
  ) %>%
  prep()

encoded <- bake(rec, new_data = NULL)

table(encoded$MonthlyIncome, binner(attrition$MonthlyIncome))
#>       
#>          1   2   3
#>   low  749   0   0
#>   med    0 440   0
#>   high   0   0 281

# What happens when a value is out of range?
ceo <- attrition %>%
  slice(1) %>%
  mutate(MonthlyIncome = 10^10)

bake(rec, ceo)
#> # A tibble: 1 × 2
#>   MonthlyIncome Attrition
#>   <ord>         <fct>    
#> 1 NA            Yes      
源代码:R/num2factor.R

相关用法


注:本文由纯净天空筛选整理自Max Kuhn等大神的英文原创作品 Convert Numbers to Factors。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。