"max" 函数的问题和 R 的日期

Problem with "max" function and dates with R

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

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函数是如何工作的...

亲切的问候

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

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"

正如评论和其他答案中已经提到的,您应该使用 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))