Я не думаю, что step_num2factor()
лучше всего подходит для этой переменной. Посмотрите на справку еще раз и обратите внимание, что вам нужно указать аргумент transform
, который можно использовать для изменения значений цифр c до определения уровней. Это работало бы хорошо, если бы все эти данные были кратны 10, но у вас есть некоторые значения, такие как 75 и 85, поэтому я не думаю, что вы этого хотите. Этот шаг рецепта работает лучше всего для числовых / целочисленных i sh переменных, которые вы можете легко преобразовать в набор целых чисел с помощью простой функции.
Вместо этого, я думаю, вы должны подумать о step_mutate()
и простое приведение к типу фактора:
library(tidyverse)
library(recipes)
#>
#> Attaching package: 'recipes'
#> The following object is masked from 'package:stringr':
#>
#> fixed
#> The following object is masked from 'package:stats':
#>
#> step
train_raw <- read_csv("~/Downloads/house-prices-advanced-regression-techniques/train.csv")
#> Parsed with column specification:
#> cols(
#> .default = col_character(),
#> Id = col_double(),
#> MSSubClass = col_double(),
#> LotFrontage = col_double(),
#> LotArea = col_double(),
#> OverallQual = col_double(),
#> OverallCond = col_double(),
#> YearBuilt = col_double(),
#> YearRemodAdd = col_double(),
#> MasVnrArea = col_double(),
#> BsmtFinSF1 = col_double(),
#> BsmtFinSF2 = col_double(),
#> BsmtUnfSF = col_double(),
#> TotalBsmtSF = col_double(),
#> `1stFlrSF` = col_double(),
#> `2ndFlrSF` = col_double(),
#> LowQualFinSF = col_double(),
#> GrLivArea = col_double(),
#> BsmtFullBath = col_double(),
#> BsmtHalfBath = col_double(),
#> FullBath = col_double()
#> # ... with 18 more columns
#> )
#> See spec(...) for full column specifications.
price_recipe <-
recipe(SalePrice ~ ., data = train_raw) %>%
step_mutate(MSSubClass = factor(MSSubClass))
juiced_price <- prep(price_recipe) %>%
juice()
levels(juiced_price$MSSubClass)
#> [1] "20" "30" "40" "45" "50" "60" "70" "75" "80" "85" "90" "120"
#> [13] "160" "180" "190"
juiced_price %>%
count(MSSubClass)
#> # A tibble: 15 x 2
#> MSSubClass n
#> <fct> <int>
#> 1 20 536
#> 2 30 69
#> 3 40 4
#> 4 45 12
#> 5 50 144
#> 6 60 299
#> 7 70 60
#> 8 75 16
#> 9 80 58
#> 10 85 20
#> 11 90 52
#> 12 120 87
#> 13 160 63
#> 14 180 10
#> 15 190 30
Создано в 2020-05-03 пакетом Представить (v0.3.0)
Для меня это выглядит так, как будто вы получаете уровни факторов, которые вы хотите. Если вы хотите сохранить эти строки из файла .txt
, например "1-STORY 1945 & OLDER", как вектор new_levels
, вы можете сказать factor(MSSubClass, levels = new_levels)
.