为什么recipes::bake()会把我的char id变成一个值为NA的因子

vmjh9lq9  于 2024-01-03  发布在  其他
关注(0)|答案(1)|浏览(94)

我有一个字符id,我想保留在数据中,但不用于训练。当我查看烘焙数据时,我看到我的ID列现在是一个因子,每个值都有一个水平,但值都是NA。
REPREX:

# Make a dataset with a unique <chr> ID
myData <- mtcars %>% 
  mutate(myID = paste("j", row_number()))

myDataSplit <- initial_split(myData)

class(testing(myDataSplit)$myID) # [1] "character"

# change role of myID from 'predictor' to 'ID'
myRecipe <- recipe(mpg ~., data = training(myDataSplit)) %>%
  update_role(myID, new_role="ID") 
  

myTesting <- myRecipe  %>%
  prep() %>% 
  bake(testing(myDataSplit))

字符串
myID现在是所有级别的一个因素,但始终不适用

> unique(myTesting$myID)
[1] <NA>
Levels: j1 j10 j13 j15 j16 j17 j19 j21 j22 j23 j24 j25 j26 j27 j28 j29 j3 j30 j32 j4 j5 j6 j7 j8


我也试过(不成功):

step_factor2string(myID)


myRecipe <- recipe(mpg ~., data = training(myDataSplit),  **convert_strings = FALSE**)


我使用了一个codeflow(),当我调用predict(myworflow,testing(myDataSplit))时,它会自动bake。这似乎可以工作,但是当我调用bake()时,myID发生了什么,这让我觉得我错过了一些重要的东西。谢谢!

f0brbegy

f0brbegy1#

在这种情况下,您需要为prep()使用strings_as_factors参数:

library(tidymodels)
df <- mtcars |> 
  mutate(myID = paste("j", row_number()))
df_split <- initial_split(df)

rec <- recipe(mpg ~ ., data = training(df_split)) |> 
  update_role(myID, new_role="ID") 
  

rec  |> 
  prep(strings_as_factors = FALSE) |> 
  bake(testing(df_split)) 
#> # A tibble: 8 × 12
#>     cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb myID    mpg
#>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl>
#> 1     6 225     105  2.76  3.46  20.2     1     0     3     1 j 6    18.1
#> 2     4  75.7    52  4.93  1.62  18.5     1     1     4     2 j 19   30.4
#> 3     8 318     150  2.76  3.52  16.9     0     0     3     2 j 22   15.5
#> 4     8 304     150  3.15  3.44  17.3     0     0     3     2 j 23   15.2
#> 5     8 400     175  3.08  3.84  17.0     0     0     3     2 j 25   19.2
#> 6     4 120.     91  4.43  2.14  16.7     0     1     5     2 j 27   26  
#> 7     6 145     175  3.62  2.77  15.5     0     1     5     6 j 30   19.7
#> 8     4 121     109  4.11  2.78  18.6     1     1     4     2 j 32   21.4

字符串
创建于2023-12-09带有reprex v2.0.2
如果你在现实生活中,你确实希望你的一些预测因素成为因素,你可能必须在食谱之前提前设置这些因素。

相关问题