在数据表中设置丹麦字母顺序或自定义字母顺序。

4

我希望按字母顺序排序我的数据表,由于我来自丹麦,我也想按照Æ、Ø和Å的顺序排序。它们应该按照以下方式正确排序:

dk <- c(LETTERS, "Æ", "Ø", "Å")
dk
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" 
"S" "T" "U" "V" "W" "X" "Y" "Z" "Æ" "Ø" "Å"

在编程中,使用库(data.table)中的setorder会很方便,但是如果我创建了一个需要排序的包含丹麦字母的数据表,setorder会设置错误的顺序。
library(data.table)
DT <- data.table(v1=c("Brød", "Ål", "Øl", "Snegl", "Æble"), v2=1:5)
setorder(DT)

DT
v1 v2
1:  Brød  1
2: Snegl  4
3:    Ål  2
4:  Æble  5
5:    Øl  3

有没有一种方法可以自定义setorder?我看了this的问题,但那只适用于你有固定行数的情况下?

使用base::sort会得到这个顺序,不知道是否与我的计算机设置有关,但奇怪的是顺序不同(而且仍然错误):

sort(DT$v1)
[1] "Æble"  "Ål"    "Brød"  "Øl"    "Snegl"

欢迎其他软件包提供的建议。

1个回答

2

我找到了一种解决方案,它使用match函数,并从这篇帖子中获得灵感。它并不完美,所以我仍然想要另一种方法,这样我就不必自己定义顺序了。如果同时有“Øl”和“Øllebrød”,那么哪一个会先出现呢?

DT[order(match(substr(DT$v1, 1,1), dk))]

      v1 v2
1:  Brød  1
2: Snegl  4
3:  Æble  5
4:    Øl  3
5:    Ål  2

编辑:这种方法稍微好一些,但我觉得我正在走向更多麻烦的道路...

DT <- data.table(v1=c("Brød", "Ål", "Øl", "Øllebrød", "Brav", "Brøl", "Snegl", "Æble"), v2=1:8)

DK <- c(LETTERS, "Æ", "Ø", "Å")
dk <- c(letters, "æ", "ø", "å")
Dk <- c("", rbind(DK, dk)) 

nr <- max(nchar(DT$v1))
for(i in nr:1){
DT <- DT[order(match(substr(DT$v1, i,i), Dk))]
}

> DT
         v1 v2
1:     Brav  5
2:     Brød  1
3:     Brøl  6
4:    Snegl  7
5:     Æble  8
6:       Øl  3
7: Øllebrød  4
8:       Ål  2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接