【问题标题】:Problem with "max" function and dates with R“max”函数和R日期的问题
【发布时间】:2020-12-14 05:52:45
【问题描述】:

我有一个带日期的数据框,我只想知道最大日期:

dates <- data.frame( randomdate = c("30-11-2018", "25-10-2018", "10-12-2015", "10-01-2020", "15-2-2013", "17-8-1999") )

所以我将它们转换为日期格式:

dates$randomdate <- as.POSIXct(dates$randomdate,format = "%d-%m-%Y")

然后我要求创建一个包含最后日期的列:

dates$last_date= as.Date(max(dates$randomdate))

问题是我的数据集中的最后一个日期是 2020 年 1 月 10 日,而 max 函数只是发明了一个日期并给了我“2020 年 1 月 9 日”(这个日期甚至不在我的数据集中)

如果有人可以帮助我,也许我不明白 max 函数是如何工作的......

亲切的问候

【问题讨论】:

  • 问题是您错误地使用as.POSIXct 转换为日期格式(警告应该是一个线索)。请改用as.Date
  • 谢谢,现在可以了。我没有任何警告,“as.Date”和“as.POSIXct”有什么区别?为什么每次都给我“前一天”?
  • 抱歉,如果您像我一样省略“format =”,您会收到警告 :) as.POSIXct 用于操作日期时间对象,因此它使用时区。根据您的默认时区,您可能会获得与 UTC 日期不同的日期。 as.Date 用于处理日期对象。所以如果你只有日期(没有时间),最好使用as.Date

标签: r max lubridate


【解决方案1】:

正如 cmets 和其他答案中已经提到的,您应该使用 as.Date 转换为日期,因为您有日期。但是,将最大日期设为“2020 年 1 月 9 日”的原因是 as.POSIXct 将对象转换为您的本地时区,而 as.Date 使用“UTC”时区。

您可以在两个函数中使用相同的时区来解决它。

dates$randomdate <- as.POSIXct(dates$randomdate,format = '%d-%m-%Y', tz = 'UTC')
dates$last_date <- max(as.Date(dates$randomdate))

【讨论】:

    【解决方案2】:

    对数据进行排序并获取最后一行。

    dates$randomdate <- as.Date(dates$randomdate,format = "%d-%m-%Y")
    dates <- data.frame(randomdate=dates[order(as.Date(dates$randomdate, format="%Y/%m/%d")),])
    dates[nrow(dates),]
    > dates[nrow(dates),]
    [1] "2020-01-10"
    

    【讨论】:

      猜你喜欢
      • 2022-11-25
      • 2019-04-15
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      相关资源
      最近更新 更多