2

我想使用许多(> 50K)标记作为特征名称执行文本分类。但是,其中的Task()函数mlr3不允许列名中有很多字符,这些字符会被传递,make.names否则很好。这是我到目前为止找到的它们的列表:

  mutate(token=str_replace(token, "à", "a")) %>% 
    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, "ô", "o")) %>%
    mutate(token=str_replace(token, "é", "e")) %>% 
    mutate(token=str_replace(token, "é", "e")) %>%   
    mutate(token=str_replace(token, "í", "i")) %>% 
    mutate(token=str_replace(token, "î", "i")) %>% 
    mutate(token=str_replace(token, "è", "e")) %>% 
    mutate(token=str_replace(token, "ë", "e")) %>% 
    mutate(token=str_replace(token, "å", "a")) %>%  
    mutate(token=str_replace(token, "â", "a")) %>%  
    mutate(token=str_replace(token, "æ", "a")) %>%  
    mutate(token=str_replace(token, "ñ", "n")) %>%  

如何使我的 data.frame 与 兼容mlr3,而无需以这种方式手动替换所有特殊字符(反复试验)?make.names()显然行不通!

我将非常感谢一些帮助:) 谢谢!

4

2 回答 2

5

一种方法是使用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 包于 2021-01-11 创建(v0.3.0)

如果您正在处理向量,而不是 data.frame 的名称,则可以使用底层函数janitor::make_clean_names()

make_clean_names("süßigkeit")
[1] "sussigkeit"
于 2021-01-11T14:52:54.647 回答
0

使用该janitor软件包是一种选择。Base R 还带有(不太复杂的)功能make.names(names, unique = TRUE),也可以正常工作。

如果您确实需要保留原始名称,您可以将实验选项设置"mlr3.allow_utf8_names"TRUE,但请注意这可能会影响一些学习者。

于 2021-05-21T14:00:38.643 回答