如何更改列名以符合 mlr3 的命名约定

How to change column names to comply to mlr3's naming convention

我想使用许多 (>50K) 标记作为特征名称来执行文本分类。但是,mlr3 中的 Task() 函数不允许列名中有很多字符,这些字符由 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() 显然不行!

非常感谢您的帮助:) 谢谢!

一种方法是使用 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-01-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,但请注意,这可能会影响一些学习者。