我想使用R来检测数据中存在的日期格式。如果一列中存在多个格式,我还想发出一个标记。
发布于 2017-08-07 12:29:39
我目前使用的是以下代码:
这些是将被识别的日期格式
dflist<-data.frame(formats=c(“%y%d%m”,“%y%m%d”,"%y - %m -%dt%H:%M:%S+ %H:%M",“%y-%m-%dt%H:%M:%S- %H:%M",”%m/ %d /%y%H:%m",“%d/%m/%y%H:%M”,“%m/ %d /%Y%H:%M PM",”%d/%m/%Y%H:%M AM",“%m/%d/%y%H:%M PM",”%d/%m/%y%H:%M AM",“%m/%d/%Y%H:%M”,“%Y%b%d”,“%Y%d%b”,"%Y- %b -%d","%Y- %d -%b","%Y.%b. %d ","%Y.%d.%b","%Y/%b/%d","%Y/%d/%b",“%b%d %Y",”%b%d %y","%b-%d-%Y","%b-%d-%y","%b.%d.%Y","%b.%d.%y"," %b /%d/%y"," %b /%d/%Y",“%d%b%Y”,“%d%b%y”,"%d- %b -%y","%d-%b-%Y",“%d.%b%Y”,“%d.%b%y”,"%d/%b/%y","%d/%b/%Y",“%y%b%d”,“%y%d%b”,"%y-%b- %d ","%y- %d -%b","%y.%b.%d",“%y%d.%b”,"%y/%b/%d","%y/%d/%b",“%Y%d%m”,“%Y%m%d”,"%Y-%d- %m ","%Y-%m-%d",“%Y- %m -%dt%H:%M:%S+%H:%M”,“%Y-%m-%dt%H:%M:%S-%H:%M”,"%Y.%d.%m","%Y.%m.%d","%Y/%d/%m","%Y/%m/%d",“%d%m%Y”,"%d-%m-%Y"," %d -%m-%y","%d.%m.%Y",“%d.%m%y”,"%d/%m/%Y","%d/%m/%y",“%m%d%Y”,"%m-%d-%Y","%m-%d-%y",“%m%d.%Y”,“%m%d.%y”,"%m/%d/%Y","%m/%d/%y","%y-%d-%m","%y-%m-%d","%y.%d.%m",“%y.%m%d”,"%y/%d/%m","%y/%m/%d"))
创建新的列(列)并在其中存储NA
dflist$columns<-NA
列fc将包含所有可用格式的列表,后缀为
dflist$fc<-paste(dflist$formats,"||",sep="")
feed1将包含后缀为"||“的所有条目的列表
feed1<-as.data.frame(sapply(knime.in,function(x){paste(x,"||",sep="")}))#在每个条目的末尾添加"||“
for(i in 1:nrow(dflist)) {
尝试使用as.date函数将条目转换为日期,并使用"dflist$fc“作为格式的参数。
如果成功转换,我们存储1,否则存储0。最后,我们将所有条目相加,得到某一列中具有某种格式的单元格的百分比
我们为列设置了80%(0.8值)的阈值,以符合具有某种日期格式的条件。
dflisti,"columns"<-paste(names(feed1)[as.logical(sapply(feed1,函数(X)ifelse(!is.na(as.Date(as.character(X),format=as.character(dflisti,“fc ") >(0.9*length(x!x==”NA||“)),1,0))],collapse=",”)}
date_table<-dflist,c(“格式”,“列”) t<-t(date_table)
https://stackoverflow.com/questions/45539448
复制相似问题