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

时间:2020-02-13 07:26:18

标签: r dataframe date-format

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

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

2 个答案:

答案 0 :(得分:2)

即使对于人类来说,要知道'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")

答案 1 :(得分: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"