【问题标题】:Sorting column in R data frame by date: Fails after 1999按日期对 R 数据框中的列进行排序:1999 年之后失败
【发布时间】:2016-01-31 05:00:25
【问题描述】:

R 中的原始数据框包含一个名为 OrdDate 的列,其值表示日期,包括 1999 年 12 月 31 日、2007 年 1 月 1 日等(其中超过 230,000 个),范围从 1999 年到 2010 年。

但是,当我将使用 R 代码(跟随)的日期排序应用于数据框时,日期对 1999 年的日期排序正确,但不从 1/1/年开始,接下来显示 1/1/2009,之前日期如 2004 年 1 月 1 日和 2000 年 1 月 2 日。

有什么想法可以在此列上强制执行正确的日期排序吗?

R 代码:

    sorted_frame<-frame1[order(as.Date(frame1$OrdDate, format="%m/%d/%y")),]

【问题讨论】:

  • 尝试使用Y而不是yfor the year as Yis a 4-digit ye​​ar and ya 2-digit
  • 您可能还想尝试 sort() 而不是 order()

标签: r sorting date


【解决方案1】:

假设你有这个:

a<-c("12/31/2010","12/31/1999","12/31/2008","12/31/1998")

使用y会失败,因为它是一个两位数的年份:

 order(as.Date(a,format="%m/%d/%y"))
[1] 2 4 1 3

那是因为你有:

as.Date(a,format="%m/%d/%y")
[1] "2020-12-31" "2019-12-31" "2020-12-31" "2019-12-31"

使用Y 将实现您想要的,因为它是一个 4 位数的年份:

order(as.Date(a,format="%m/%d/%Y"))
[1] 4 2 3 1

正如 R 分析师指出的那样,使用 sort 可能是一个更好的解决方案,因为它将您的值作为 R 的日期返回:

a[order(as.Date(a,format="%m/%d/%Y"))]
[1] "12/31/1998" "12/31/1999" "12/31/2008" "12/31/2010"

sort(as.Date(a,format="%m/%d/%Y"))
[1] "1998-12-31" "1999-12-31" "2008-12-31" "2010-12-31"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2012-06-26
    • 2018-03-18
    • 2021-04-04
    • 2014-05-08
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多