str*_*tum 5 r one-hot-encoding
在这篇文章中,他们讨论了如何在 R 中对单因子变量进行单热编码。我想知道如何扭转问题并从对某些属性进行单热编码的变量中获取单因子?
这是一个解决方案...
\n第一个热编码carb
mtcars$carb <- factor(mtcars$carb)\ndf <- as.data.frame(model.matrix(~ carb - 1, mtcars))\nhead(df)\n\n#> carb1 carb2 carb3 carb4 carb6 carb8\n#> Mazda RX4 0 0 0 1 0 0\n#> Mazda RX4 Wag 0 0 0 1 0 0\n#> Datsun 710 1 0 0 0 0 0\n#> Hornet 4 Drive 1 0 0 0 0 0\n#> Hornet Sportabout 0 1 0 0 0 0\n#> Valiant 1 0 0 0 0 0\nRun Code Online (Sandbox Code Playgroud)\n我们当然可以选择热编码变量
\nlibrary(dplyr)\n\ndf %>% \n rowwise() %>% \n mutate(remade = which.max(c_across(starts_with("carb")))) %>%\n ungroup %>%\n mutate(remade = factor(remade))\n\n#> # A tibble: 32 x 7\n#> carb1 carb2 carb3 carb4 carb6 carb8 remade\n#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct> \n#> 1 0 0 0 1 0 0 4 \n#> 2 0 0 0 1 0 0 4 \n#> 3 1 0 0 0 0 0 1 \n#> 4 1 0 0 0 0 0 1 \n#> 5 0 1 0 0 0 0 2 \n#> 6 1 0 0 0 0 0 1 \n#> 7 0 0 0 1 0 0 4 \n#> 8 0 1 0 0 0 0 2 \n#> 9 0 1 0 0 0 0 2 \n#> 10 0 0 0 1 0 0 4 \n#> # \xe2\x80\xa6 with 22 more rows\nRun Code Online (Sandbox Code Playgroud)\n这里它是一个函数,可以选择保留或删除一个热编码列,如@KM_83
\ncold_encode <- function(df, encoded_prefix, keep_dummies = FALSE) {\n var <- sym(encoded_prefix)\n df <- \n df %>%\n rowwise() %>%\n mutate({{ var }} := which.max(c_across(starts_with(encoded_prefix)))) %>%\n ungroup %>%\n mutate({{ var }} := factor({{ var }})) \n if (!keep_dummies) {\n df <- \n df %>% select(-matches(paste0(encoded_prefix,1:9)))\n }\n return(df)\n}\n\ncold_encode(df, "carb")\n#> # A tibble: 32 x 11\n#> mpg cyl disp hp drat wt qsec vs am gear carb \n#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <fct>\n#> 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4 \n#> 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4 \n#> 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 \n#> 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1 \n#> 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 \n#> 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1 \n#> 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 \n#> 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2 \n#> 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2 \n#> 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4 \n#> # \xe2\x80\xa6 with 22 more rows\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1421 次 |
| 最近记录: |