【问题标题】:How do I arrange or sort dates with R and dplyr [duplicate]如何使用 R 和 dplyr 安排或排序日期 [重复]
【发布时间】:2018-03-18 01:49:09
【问题描述】:

我想在日期列上对我的数据框进行排序。 我的示例数据框:

library(tidyverse)    

dates <- tibble(date = c("01-01-2017", "02-03-2017", "01-02-2017", "02-01-2017", "01-03-2017"), 
                   value = c(8, 12, 4, 14, 11)) 

所以以下方法不起作用,因为它只按天排序。

arrange(dates, date)

【问题讨论】:

  • 使用来自lubridate 包的as.Date()dmy() 将它们转换为实际的日期格式。如果您将日期存储为字符串,它们将按此类排序,即按字母顺序。
  • 您需要将日期向量转换为日期类,例如dat &lt;- as.Date(dat$date, "%m-%d-%Y")。其中 dat 是您的 tibbly 的名称。

标签: r sorting date


【解决方案1】:

您在问题中保存数据的方式不适合按日期排序。它保存为常规字符串,而您希望 R 将其识别为日期。

使用as.Date() 执行此操作,包括日期字符串的特定格式。从您的问题来看,您的日期字符串是日-月-年(format = "%d-%m-%Y")还是月-日-年(format = "%m-%d-%Y")并不清楚:

dates$date <- as.Date(dates$date, format="%d-%m-%Y")
arrange(dates, date)
# 1 2017-01-01     8
# 2 2017-01-02    14
# 3 2017-02-01     4
# 4 2017-03-01    11
# 5 2017-03-02    12

【讨论】:

  • 格式应为%d-%m-%Y,但数据结果为%Y-%m-%d。当我像这样dates$date &lt;- format(as.Date(dates$date, format = "%Y-%m-%d"), "%d-%m-%Y") 格式化它时,它也不起作用,并且该类再次切换到字符...
  • 机器在as.Date()之后解释的格式就是你想要的格式。但是,您想要查看的内容无关紧要,除非您必须准备某种具有标准日期格式的报告。在报告的情况下,您可以使用您在评论中提到的format() 将日期格式的数据转换为字符串
【解决方案2】:

根据您的评论,这里有一个问题,日期数据类型应该存储为日期,而不是字符串,这样您就可以按它们进行排序和过滤等。

当您选择输出信息时,您可以对其进行格式化并使其看起来更漂亮。

第一个示例将日期转换为实际日期,然后您可以按此列过滤/排序,第二个仅对其进行排序,如果您希望执行其他操作,则需要再次转换。

选项 1(好):

dates_mos <- dates %>%
  mutate(date = as.Date(date, "%d-%m-%Y")) %>%
  arrange(date)

输出 1:

        date value
      <date> <dbl>
1 2017-01-01     8
2 2017-01-02    14
3 2017-02-01     4
4 2017-03-01    11
5 2017-03-02    12

选项 2(不太好):

dates_mos <- dates %>%
  arrange(date = as.Date(date, "%d-%m-%Y"))

输出 2:

        date value
       <chr> <dbl>
1 01-01-2017     8
2 02-01-2017    14
3 01-02-2017     4
4 01-03-2017    11
5 02-03-2017    12

【讨论】:

  • 格式应该是 %d-%m-%Y 但是数据给出了这个 %Y-%m-%d 作为结果。当我像这样格式化时 dates$date
  • @Tdebeus 您将日期的文本表示与日期数据类型混淆了。第一个是一个字符串,在人类看来就像一个日期,第二个是机器可读的日期,你只能对后者进行过滤/排序
  • 非常好的编辑谢谢!
  • 要按日期降序排序,请使用arrange(desc(date))
猜你喜欢
  • 2015-11-29
  • 2012-05-25
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多