【问题标题】:Mixed Date formats in R data frameR数据框中的混合日期格式
【发布时间】:2020-02-13 07:26:18
【问题描述】:
【问题讨论】:
标签:
r
dataframe
date-format
【解决方案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")
【解决方案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"