首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理包含两位数和四位数年份的日期

处理包含两位数和四位数年份的日期
EN

Stack Overflow用户
提问于 2013-02-15 19:07:47
回答 2查看 969关注 0票数 2

我有一个文件夹,里面有很多文件(通过list.fileslapply阅读),它们的年份是两位数和四位数。80年代和90年代的日期是两位数,2000年代的日期是四位数(但这些数字在每个文件中都是混合的,所以我不能对文件名执行正则表达式)。

有没有更好的方式来处理这个问题?我有以下临时解决方案。

代码语言:javascript
复制
vec1 <- c("06/30/97", "12/31/99", "01/01/2000", "05/25/2001")
vec2 <- as.POSIXlt(as.Date(vec1, "%m/%d/%Y"))
vec3 <- vec2
vec3$year <- ifelse(vec3$year < 100, vec3$year + 1900, vec3$year)

这似乎特别不靠谱。这些情况可以工作,但这是否一定会将%y调整为%Y?我担心这会因为闰年之类的原因而默默地失败。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-15 19:26:01

如果你知道你只需要在年份只有两位数的日期前加上"19“,你也可以用gsub来做:

代码语言:javascript
复制
vec1 <- c("06/30/97", "12/31/99", "01/01/2000", "05/25/2001")
gsub("(.*)/(..)$", "\\1/19\\2", vec1)
# [1] "06/30/1997" "12/31/1999" "01/01/2000" "05/25/2001
票数 3
EN

Stack Overflow用户

发布于 2013-02-15 19:22:54

我们可以修改我的answer to a previous question以适应这种更“模糊”的情况:

代码语言:javascript
复制
multidate <- function(data, formats){
    a<-list()
    for(i in 1:length(formats)){
        a[[i]]<- as.Date(data,format=formats[i])
        a[[i]][a[[i]]>Sys.Date() | a[[i]]<as.Date("1000-01-01")]<-NA
        a[[1]][!is.na(a[[i]])]<-a[[i]][!is.na(a[[i]])]
        }
    a[[1]]
    }

multidate(vec1, c("%m/%d/%Y","%m/%d/%y"))
[1] "1997-06-30" "1999-12-31" "2000-01-01" "2001-05-25"
#or
multidate(vec1, c("%m/%d/%y","%m/%d/%Y"))
[1] "1997-06-30" "1999-12-31" "2000-01-01" "2001-05-25"

只要你未来没有约会,它就可以工作。如果您这样做了,请在将来的任何其他日期更改Sys.Date()

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14893364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档