如何将日期时间转换为R中的日期,而无需四舍五入?

问题描述 投票:0回答:2

我正在使用R并尝试将datetime字段转换为仅日期? R为我提供了所需的格式,但仍舍入了一些日值。特别是中午12点以后的一切!我找不到解决此确切问题的任何线程。我实际上想出了[[a解决方案,但由于我花了整整一周的时间进行故障排除,所以想发布问题。

#Convert the datetime field from character to a datetime main_df$datetime <- strptime(main_df$ï..Date, format = "%m/%d/%Y %H:%M") main_df$datetime <- as.POSIXct(main_df$datetime, tz = Sys.timezone()) head(main_df$datetime) class(main_df$datetime) #Remove the poorly computer-titled character field that contained datetime info main_df <- subset(main_df, select = -c(ï..Date)) #Use the NEW datetime field to create a date field #main_df$Date <- trunc(main_df$datetime,"days") main_df$Date <- as.Date(main_df$datetime, format = "%m/%d/%Y") ?as.Date() class(main_df$Date) head(main_df$Date)
返回:

head(main_df$datetime) [1] "2020-05-16 00:31:00 CDT" "2020-05-16 00:30:00 CDT" "2020-05-15 23:33:00 CDT" "2020-05-15 15:33:00 CDT" [5] "2020-05-15 22:31:00 CDT" "2020-05-15 22:12:00 CDT"

> class(main_df$Date) [1] "Date" > > head(main_df$Date) [1] "2020-05-16" "2020-05-16" "2020-05-16" "2020-05-15" "2020-05-16" "2020-05-16"

请注意,“日期”的最后4个值应如何为2020-05-

15,而是将其转换为2020-05-16。那么还有什么其他方法可以解决此问题?我将发布一种可行的方法,但我怀疑这是最干净的方法。

r date datetime time data-conversion
2个回答
1
投票
[如果我们不想利用'时间',则使用正则表达式来匹配一个空格,后跟其他字符(" .*"),在sub中替换为空白,然后转换为Date类。转换为DateTime的问题是,有时"23:33:00"会使它转换为第二天

main_df$Date <- as.Date(sub(" .*", "", main_df$datetime), format = "%m/%d/%Y")


0
投票
您输入的日期是否包含时区规范?如果不是,则它们是模棱两可的,四舍五入可能是正确的,也可能是错误的。如果它们确实包含时区规范,则lubridate程序包应正确处理它们。

我建议您不要使用tz = Sys.timezone(),因为如果您的输入不包含时区规范,那么这将使输入数据和算法之间的交互取决于地理位置,因此对您有用的内容可能不适用于不同用户位置。

© www.soinside.com 2019 - 2024. All rights reserved.