更改重音字母的排序规则优先级
change collation priority for accented letters
面对模仿旧系统(来自大型机时代)的行为的需要,我需要编写一个特定的排序标准,其中非 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
您能推荐一些替代方法吗?
我刚找到答案:使用 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
面对模仿旧系统(来自大型机时代)的行为的需要,我需要编写一个特定的排序标准,其中非 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
您能推荐一些替代方法吗?
我刚找到答案:使用 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