我有大量带有datetime列的csv文件,这些文件过去已经过手动修补,现在包括两种日期格式:
dd / mm / yyyy hh:mm
mm / dd / yyyy hh:mm
我无法从转换点正确解析日期
我将lubridate :: parse_date_time()用于我拥有的订单:
parse_date_time(date_time, orders = c("dmY HM", "mdY HM", "Ymd HMS"))
当其中一个值大于12且被正确标识为一天而不是一个月时,此方法工作正常。问题是日期使用以下两种格式(正确或不正确)进行解析时:
例如:2011年3月4日 可能是:2011-04-03或2011-03-04
答案 0 :(得分:0)
如果您要根据注释中建议的顺序进行操作,则可以执行以下操作。如果缺少很长一段时间,而且我还没有完全测试逻辑,那么您肯定会遇到问题
library(dplyr)
library(zoo)
#Made up some data
testinput <- read.table(sep = ",",
text = "25/03/2010 01:00
03/04/2010 02:00
15/04/2010 01:00
05/01/2010 07:00
16/05/2010 09:00
05/20/2010 15:00
05/22/2010 08:00
01/06/2010 21:00
20/06/2010 14:00"
)
# try converting it both ways
test <- testinput %>% mutate(date1 = as.POSIXct(V1, format = "%d/%m/%Y %H:%M"),
date2 = as.POSIXct(V1, format = "%m/%d/%Y %H:%M"))
#check the order - not sure if there is a better way to do this
test2 <- test %>% mutate(date1test = date1 >= lag(zoo::na.locf(date1, na.rm = F))&
date1<= lead(zoo::na.locf(date1,fromLast=T, na.rm = F)),
date2test = date2 >= lag(zoo::na.locf(date2, na.rm = F))&
date2<= lead(zoo::na.locf(date2,fromLast=T, na.rm = F)))
#pick which one to use
test2 %>% mutate(Out =
case_when(is.na(date2)~date1,
is.na(date1)~date2,
date1test~date1,
date2test~date2))