我有一个大约有53,000行的数据集,其中一列测量观察的日期和时间。在数据收集期间,不知何故,日期的格式从mm/dd/年转换为dd/mm/年,并且这种情况发生了几次。但是,我知道每个错误发生的确切行,所以我想知道是否有一种有效的方法将它们全部更改为单一格式(我希望它们以mm/dd/年的形式出现,因为这是大多数观察结果的格式)。
下面是我正在讨论的问题的一个示例,从dd/mm/年到mm/dd/年:
data.test = data.frame(Date = c("16/11/2017 8:45 AM", "16/11/2017 9:00 AM",
"11/16/2017 9:15 AM", "11/16/2017 9:30 AM"), Observed = c(100, 23, 291, 30))
data.test
Date Observed
16/11/2017 8:45 AM 100
16/11/2017 9:00 AM 23
11/16/2017 9:15 AM 291
11/16/2017 9:30 AM 30 在我的数据集中,日期是字符,而其余行是数字。
发布于 2019-02-23 05:55:58
这是一个有趣的尝试。假设您的第一个观察值的格式是正确的,则需要编写一些代码,以便根据日期应该在哪个月来检查最合理的日期格式。它如何处理几个月的变化,我还不完全确定。
这个想法是,只要第一个观察结果是正确的,它就会以正确的格式继续下去,直到一个模糊的日期被击中。在这一点上,它与前一个被认为是正确的观察月份进行了核对。如果它们匹配,则表明当前的模糊观测被正确预测,如果不匹配,则选择另一种格式。再一次,当月份转换,一个模棱两可的点击需要一些工作,但我太懒了(这是星期五)
data.test = data.frame(Date = c("9/8/2017 8:30 AM","8/9/2017 8:45 AM", "16/11/2017 9:00 AM", "11/16/2017 9:15 AM", "11/16/2017 9:30 AM"), Observed = c(100, 23, 291, 30, 45))
Date1<-
as.POSIXct(data.test$Date, format="%m/%d/%Y %H:%M %p") # search for format1
Date2<-
as.POSIXct(data.test$Date, format="%d/%m/%Y %H:%M %p") # search for format2
# Replace data.test Date Column with Date1, leaving NAs
data.test$Date<-Date1
#Check most plausible date format.
for(i in 1:length(Date1)){
if(is.na(Date1[i])==F && is.na(Date2[i])==F && i!= 1){
print(paste("row",i , "ambigious format"))
if(month(Date1[i-1])==month(Date1[i])){
print("Date Estimated from mm/dd/YYYY format based on previous")
}else{
Date1[i]<-Date2[i]
print("Date Estimated from dd/mm/YYYY format based on previous")
}
}else{}
}
# Replace NAs in data.test with index from Date2, line up
data.test$Date[is.na(data.test$Date)] <- Date2[is.na(data.test$Date)]
> data.test
Date Observed
1 2017-09-08 08:30:00 100
2 2017-09-08 08:45:00 23
3 2017-11-16 09:00:00 291
4 2017-11-16 09:15:00 30
5 2017-11-16 09:30:00 45https://stackoverflow.com/questions/54835495
复制相似问题