gpt4 book ai didi

r - setorder 丹麦字母或数据表中字母的自定义排序

转载 作者:行者123 更新时间:2023-12-04 10:39:15 25 4
gpt4 key购买 nike

我想按字母顺序排列我的数据表,因为我来自丹麦,所以我也想订购 Æ、Ø 和 Å。它们的顺序是这样正确的:

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" "Æ" "Ø" "Å"

library(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"

也非常欢迎来自其他软件包的建议。

最佳答案

我找到了一个使用 match 的解决方案,灵感来自这个 post .它并不完美,所以仍然想要另一种方法,所以我不必自己定义顺序。如果 Ø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

关于r - setorder 丹麦字母或数据表中字母的自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43801716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com