我正在使用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。那么还有什么其他方法可以解决此问题?我将发布一种可行的方法,但我怀疑这是最干净的方法。
" .*"
),在sub
中替换为空白,然后转换为Date
类。转换为DateTime的问题是,有时"23:33:00"
会使它转换为第二天main_df$Date <- as.Date(sub(" .*", "", main_df$datetime), format = "%m/%d/%Y")
lubridate
程序包应正确处理它们。我建议您不要使用tz = Sys.timezone()
,因为如果您的输入不包含时区规范,那么这将使输入数据和算法之间的交互取决于地理位置,因此对您有用的内容可能不适用于不同用户位置。