如何R中的字符比较工作?(How does character comparison work in

2019-10-18 23:10发布

我曾经直接在我的代码使用字符串比较,没有给它多大的心思。 然后,我最近发现的东西是在这里下车,就好像它工作了再说

> "1" < "2"
[1] TRUE

它失败

> "6" < "10"
[1] FALSE

我认为是这是一个非常简单的解释,我只是哑巴。 也许它比较其ASCII值什么的。 任何见解?

我想问的原因是我打算整理时间戳这是阶级性的载体。

例如:

> timeStamps <- c("2013/10/30 12:12:17","2013/10/30 12:12:38","2013/10/30 12:10:32","2013/10/30 12:09:42")
> sort(timeStamps)
[1] "2013/10/30 12:09:42" "2013/10/30 12:10:32" "2013/10/30 12:12:17" "2013/10/30 12:12:38"

它是安全的这样做呢? 或者是他们的情况下,它会失败,我应该把它转换成正确的时间戳格式,然后排序呢?

Answer 1:

串之间的比较依赖于语言环境和琴弦的编码。 的?Comparison帮助页面详细介绍了该过程。

大部分(可能全部)的语言环境和编码,并会考虑"0" < "1" < "2" ... " < "9" ,所以只要您的日期,时间是在格式%Y/%m/%d %H:%M:%S ,他们将正确排序。

这是一个非常危险的做法虽然,因为

  1. 单个数字天或数月(如3,而不是03三月)将打破排序顺序。

  2. 而不是斜线连字符或其他标点符号将打破排序顺序。

  3. 你将无法识别不存在的日期时间。

总而言之,到时候你会花使用字符串调试问题,日期将远远超过它的时间来写一行代码转换为日期格式。

timeStamps <- strptime(timeStamps, "%Y/%m/%d %H:%M:%S")

要么

library(lubridate)
timeStamps <- ymd_hms(timeStamps)


文章来源: How does character comparison work in R?
标签: r posixct