R数据框中的混合日期格式

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

您如何使用混合日期类型的列,例如8/2 / 2020,2 / 7/2020,并且都反映了2月,我已经尝试过zoo :: as.Date(mixeddatescolumn,“%d /%m /%Y”)。第一个是正确的,但是第二个是错误的。

我也在这里尝试过解决方案Fixing mixed date formats in data frame?,但问题似乎与我正在处理的问题不同。

r dataframe date-format
2个回答
1
投票

[对于人类来说,要知道像'8/2/2020'这样的日期是2月8日还是8月2日,这确实很棘手。但是,我们可以利用一个事实,即您知道所有这些日期都在2月,并删除代表月份的日期的“ 2”部分,并以一种标准格式排列日期,然后将日期转换为实际的Date对象。

x <- c('8/2/2020','2/7/2020')
lubridate::mdy(paste0('2/', sub('2/', '', x, fixed = TRUE)))
#[1] "2020-02-08" "2020-02-07"

或与基R相同:

as.Date(paste0('2/', sub('2/', '', x, fixed = TRUE)), "%m/%d/%Y")

0
投票

因为我们知道每个月都是2月,所以请搜索/ 2 /或/ 02 /,如果找到中间的数字是月份;否则,第一个数字是月份。在任何一种情况下,都应适当设置格式并使用as.Date。不使用任何软件包。

dates <- c("8/2/2020", "2/7/2020", "2/28/2000", "28/2/2000") # test data

as.Date(dates, ifelse(grepl("/0?2/", dates), "%d/%m/%Y", "%m/%d/%Y"))
## [1] "2020-02-08" "2020-02-07" "2000-02-28" "2000-02-28"
© www.soinside.com 2019 - 2024. All rights reserved.