【问题标题】:change collation priority for accented letters更改重音字母的排序规则优先级
【发布时间】:2021-07-02 12:56:44
【问题描述】:

面对模仿旧系统(从大型机时代开始)的行为的需要,我需要编写一个特定的排序标准,其中非 ASCII 字母的优先级最低。

我已经开始写这样的东西(仅适用于字符串的第一个字母):

library(tidyverse)
library(stringi)

df <- tribble(
  ~nombre,
  "Alonso",
  "Álvarez",
  "Zapatero"
)
df %>%
  arrange(nombre)
#> # A tibble: 3 x 1
#>   nombre  
#>   <chr>   
#> 1 Alonso  
#> 2 Álvarez 
#> 3 Zapatero
df %>%
  arrange(stri_trans_general(str_sub(nombre, 1, 1), "Latin-ASCII") != str_sub(nombre, 1, 1),
          nombre)
#> # A tibble: 3 x 1
#>   nombre  
#>   <chr>   
#> 1 Alonso  
#> 2 Zapatero
#> 3 Álvarez

您会建议一些替代方法吗?

【问题讨论】:

    标签: r collation icu stringi


    【解决方案1】:

    我刚刚找到了答案:使用icuSetCollate(locale = "ASCII")

    library(tidyverse)
    library(stringi)
    df <- tribble(
      ~nombre,
      "Alonso",
      "Álvarez",
      "Zapatero"
    )
    
    icuSetCollate(locale = "ASCII")
    df %>%
      arrange(nombre)
    #> # A tibble: 3 x 1
    #>   nombre  
    #>   <chr>   
    #> 1 Alonso  
    #> 2 Zapatero
    #> 3 Álvarez
    
    icuSetCollate(locale = "default")
    df %>%
      arrange(nombre)
    #> # A tibble: 3 x 1
    #>   nombre  
    #>   <chr>   
    #> 1 Alonso  
    #> 2 Álvarez 
    #> 3 Zapatero
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-06
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2014-08-05
      相关资源
      最近更新 更多