如何在同一列中更改多种日期格式? [英] How to change multiple Date formats in same column?
本文介绍了如何在同一列中更改多种日期格式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
到目前为止,我得到的是一个数据框列,其中的日期使用不同的字符格式。少数出现在%d。%m。%Y
模式中,有些出现在%m /%d /%Y
:
What I've got so far is a dataframe column with dates in different character formats. A few appear in the %d.%m.%Y
pattern, some in %m/%d/%Y
:
data$initialDiagnose = as.character(data$initialDiagnose)
data$initialDiagnose[1:10]
[1] "14.01.2009" "9/22/2005" "4/21/2010" "28.01.2010" "09.01.2009" "3/28/2005" "04.01.2005" "04.01.2005" "9/17/2010" "03.01.2010"
我希望将它们作为Date()的一种格式,但R当然会拒绝。
因此,我首先尝试通过分隔符更改它们:
I want them as Date() in one format, but R refuses of course.
So I tried at first to change them by the separator:
data$initialDiagnose[grep('/', data$initialDiagnose)] = as.character.Date(data$initialDiagnose[grep('/', data$initialDiagnose)], format = '%m/%d/%Y')
模拟到。日期。
如何将它们全部更改为一种可以与它们一起使用的格式?
How can I change them all to one format, that I can work with them?
推荐答案
a <- as.Date(data$initialDiagnose,format="%m/%d/%Y") # Produces NA when format is not "%m/%d/%Y"
b <- as.Date(data$initialDiagnose,format="%d.%m.%Y") # Produces NA when format is not "%d.%m.%Y"
a[is.na(a)] <- b[!is.na(b)] # Combine both while keeping their ranks
data$initialDiagnose <- a # Put it back in your dataframe
data$initialDiagnose
[1] "2009-01-14" "2005-09-22" "2010-04-21" "2010-01-28" "2009-01-09" "2005-03-28" "2005-01-04" "2005-01-04" "2010-09-17" "2010-01-03"
另外,上述方法适用于三种(或更多)不同格式的情况:
Additionnaly here's the preceding method adapted to a situation where you have three (or more) different formats:
data$initialDiagnose
[1] 14.01.2009 9/22/2005 12 Mar 97 4/21/2010 28.01.2010 09.01.2009 3/28/2005
Levels: 09.01.2009 12 Mar 97 14.01.2009 28.01.2010 3/28/2005 4/21/2010 9/22/2005
multidate <- function(data, formats){
a<-list()
for(i in 1:length(formats)){
a[[i]]<- as.Date(data,format=formats[i])
a[[1]][!is.na(a[[i]])]<-a[[i]][!is.na(a[[i]])]
}
a[[1]]
}
data$initialDiagnose <- multidate(data$initialDiagnose,
c("%m/%d/%Y","%d.%m.%Y","%d %b %y"))
data$initialDiagnose
[1] "2009-01-14" "2005-09-22" "1997-03-12" "2010-04-21" "2010-01-28" "2009-01-09" "2005-03-28"
这篇关于如何在同一列中更改多种日期格式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文