2

2桁と4桁の年が混在する多くのファイル(およびを介して読み取るlist.files)を含むフォルダーがあります。lapply80年代と90年代の日付は2桁で、2000年代の日付は4桁です(ただし、これらは各ファイル全体で混在しているため、ファイル名を正規表現することはできません)。

これを処理するための好ましい方法はありますか?私は次のアドホックソリューションを持っています。

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への調整を行いますか?うるう年などで黙って失敗するのではないかと思います。ありがとう!

4

2 に答える 2

4

前の質問に対する私の答えを変更して、このより「あいまいな」ケースに適応させることができます。

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()他の将来の日付で変更してください。

于 2013-02-15T11:22:53.983 に答える
3

年が2桁しかない日付の前に「19」を追加するだけでよいことがわかっている場合は、次のコマンドを使用することもできますgsub

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
于 2013-02-15T11:26:00.777 に答える