arrange() 将大写字母放在前面

问题描述 投票:0回答:2

我通常使用

arrange()
中的
dplyr
函数对数据集进行排序,但它的行为方式我无法理解。我花了一点时间才弄清楚这件事的真相。我已经修复了我的代码并使用
order()
来做同样的事情,但现在我很好奇。我多年来一直不假思索地使用
arrange()
,我想知道为什么这似乎是默认行为。当涉及大写字母时,它似乎无法按字母顺序排序 - 例如,它认为大写字母应该排在小写字母之前,即使后者在字母表中位于小写字母之前。我错过了什么吗?

这并不总是一个问题,但当我通过

tapply()
排列后立即使用
arrange()
时,这对我来说确实成为一个问题,假设数据的排序方式与
tapply()
运行时排序的方式相同。这是
arrange()
将“苏联”放在“乌干达”和“乌克兰”之前的示例,而
order()
(我认为正确!)将其放在最后。

library(dplyr)
countries<-c("USSR","Uganda","Ukraine")
tmp<-data.frame(countries,stringsAsFactors=F)
tmp %>% arrange(countries) #orders it one way
tmp[order(tmp$countries),] #orders it another way
sort(tmp$countries) #sort agrees with order

我环顾四周,看看其他人是否也遇到过同样的问题,但什么也没看到。如果之前已经讨论过这个问题,请原谅我。

r sorting dplyr
2个回答
3
投票

是的,@MrFlick 的评论是正确的。如果我这样做

Sys.setlocale("LC_COLLATE","C")

然后

tmp[order(tmp$countries),]

arrange()

的结果匹配

0
投票

根据documentaton,它需要定义locale。在这种情况下,添加此问题即可解决

.locale=en
:

tmp %>% arrange(countries, .locale=en)
© www.soinside.com 2019 - 2024. All rights reserved.