gpt4 book ai didi

r - 处理混合了两位数和四位数字年份的日期

转载 作者:行者123 更新时间:2023-12-02 08:43:05 25 4
gpt4 key购买 nike

我有一个包含许多文件(通过 list.fileslapply 读取)的文件夹,这些文件混合使用两位数和四位数字年份。 80 年代和 90 年代的日期是两位数,2000 年代的日期是四位数(但这些在每个文件中都是混合的,所以我无法对文件名进行正则表达式)。

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

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 调整吗?恐怕这会由于闰年之类的原因而悄无声息地失败。谢谢!

最佳答案

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

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"

只要您没有 future 的日期,它就可以工作。如果这样做,请将 Sys.Date() 更改为任何其他 future 日期。

关于r - 处理混合了两位数和四位数字年份的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14893364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com