我有一个分类变量,我想将其转换为分类任务的假人。 问题是某些水平只出现几次,因此当我在训练集和测试集中拆分样本时,它们会产生完美多重共线性问题。
如何以快速优雅的方式摆脱这些关卡? 下面是我的数据的简单示例:
label var_x
1 1
0 2
1 1
0 3
1 2
0 4
0 5
1 5
1 1
....
假设我只想保留出现超过 1(或任何其他数字(的级别 我想将这些情况重新编码为"0"并获得如下所示的内容:
label var_x
1 1
0 2
1 1
0 0
1 2
0 0
0 5
1 5
1 1
....
谢谢你的帮助
一个dplyr
选项可能是:
df %>%
add_count(var_x) %>%
mutate(var_x = as.numeric(n > 1)*var_x) %>%
select(-n)
label var_x
<int> <dbl>
1 1 1
2 0 2
3 1 1
4 0 0
5 1 2
6 0 0
7 0 5
8 1 5
9 1 1
同样的想法与base R
as.numeric(with(data.frame(table(df$var_x)), Freq[match(df$var, Var1)]) > 1)*df$var_x
我认为你需要这个:
mtcars %>%
mutate(cyl_factor = forcats::fct_lump(as_factor(cyl),prop=.4),
disp_factor = forcats::fct_lump_min(as_factor(disp), min = 2)) %>%
head(10)
mpg cyl disp hp drat wt qsec vs am gear carb cyl_factor disp_factor
1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Other 160
2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Other 160
3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 Other Other
4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 Other Other
5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 8 360
6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 Other Other
7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 8 360
8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 Other Other
9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 Other Other
10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 Other 167.6