【问题标题】:arrange() putting capital letters first安排()把大写字母放在第一位
【发布时间】:2015-09-17 21:52:23
【问题描述】:

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

这并不总是一个问题,但是当我在通过arrange() 安排后立即使用tapply() 时,它确实成为了一个问题,假设数据的排序方式与tapply() 在运行时的排序方式相同。这是arrange() 将“USSR”放在“Uganda”和“Ukraine”之前的示例,而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

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

【问题讨论】:

  • 我想知道 ?arrange 中的这个位是否相关:“请注意,对于本地数据帧,排序是在 C++ 代码中完成的,它无法访问通常在 R 中完成的本地特定排序。这个表示字符串的排序就像在 C 语言环境中一样。”
  • 另见?Comparison 帮助页面上的讨论,特别是描述order() 工作原理的段落,开头是“字符向量中字符串的比较是使用正在使用的语言环境。”
  • 谢谢。这很烦人!但揭示..
  • 这个问题较新,但有更详细的答案

标签: r sorting dplyr


【解决方案1】:

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

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

然后

tmp[order(tmp$countries),]

匹配来自arrange()的结果

【讨论】:

  • 但是!似乎没有一种方法可以轻松更改 dplyr 的语言环境,至少在 Windows 框中是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多