问题描述
我想使用许多(> 50K)标记作为特征名称来执行文本分类。然而,Task()
中的 mlr3
函数不允许在列名中包含太多字符,这些字符由 make.names
传递,否则没有问题。以下是我目前找到的列表:
mutate(token=str_replace(token,"à","a")) %>%
mutate(token=str_replace(token,"ã","a")) %>%
mutate(token=str_replace(token,"á","ø","o")) %>%
mutate(token=str_replace(token,"ç","c")) %>%
mutate(token=str_replace(token,"ô","é","e")) %>%
mutate(token=str_replace(token,"e")) %>%
mutate(token=str_replace(token,"í","i")) %>%
mutate(token=str_replace(token,"î","è","ë","å","â","æ","ñ","n")) %>%
如何使我的 data.frame 与 mlr3
兼容,而无需以这种方式手动替换所有特殊字符(反复试验)? make.names()
显然不起作用!
我非常感谢您的帮助:) 谢谢!
解决方法
一种方法是使用 janitor::clean_names()
d <- data.frame(`süßigkeit` = 1:3,`straße` = 1:3,`Hellö` = 1:3,`séé` = 1:3)
janitor::clean_names(d)
#> sussigkeit strasse hello see
#> 1 1 1 1 1
#> 2 2 2 2 2
#> 3 3 3 3 3
由 reprex package (v0.3.0) 于 2021 年 1 月 11 日创建
如果您正在处理向量,而不是 data.frame 的名称,则可以使用底层函数 janitor::make_clean_names()
:
make_clean_names("süßigkeit")
[1] "sussigkeit"
,
使用 janitor
包是一种选择。 Base R 还带有(不太复杂的)函数 make.names(names,unique = TRUE)
,它也可以正常工作。
如果您确实需要保留原始名称,可以将实验选项 "mlr3.allow_utf8_names"
设置为 TRUE
,但请注意,这可能会打扰一些学习者。