DÚVIDA as.Date - erro na transformação

Prezados membros, Saudações, Estou tendo dificuldade com a conversão de formatos no comando as.Date (que entendo é diferente do as.date, d minúsculo). Segue abaixo: 1 - comandos dates <- c( "12/30/68","12/31/68", "01/01/69", "01/02/69", "02/01/92") as.Date(dates, "%m/%d/%y") # MÊS/DIA/ANO Quero transformar para ano = 4 dígitos 2- resultados
dates <- c( "12/30/68","12/31/68", "01/01/69", "01/02/69", "02/01/92")
as.Date(dates, "%m/%d/%y") [1] "2068-12-30" "2068-12-31" "1969-01-01" "1969-01-02" "1992-02-01"
Para datas anteriores a 31/12/1968 ele transforma o ano 68 em 2068 ao invés de 1968. Não sei como resolver. -- Atenciosamente, Profa. Dra. Maria da Conceição F. Freitas Tandel UNESP - IGCE- DEMAC RIO CLARO, SP

Isto é porque no padrao atual todos os anos reopresetnedos por 2 digitos até 68 sao considertados do século atual %y Year without century (00–99). On input, values 00 to 68 are prefixed by 20 and 69 to 99 by 19 – that is the behaviour specified by the 2004 and 2008 POSIX standards, but they do also say ‘it is expected that in a future version the default century inferred from a 2-digit year will change’ Uma solucao é transformar seu vetor strings para anos com 4 digitos e uma possivel forma de fazer isto segue abaixo (vou supor que qq ano entre 00 e 12 é do seculo 21 (20??), caso contrário no 20 (19??)
(ap1 <- strsplit(dates, "/")) [[1]] [1] "12" "30" "68"
[[2]] [1] "12" "31" "68" [[3]] [1] "01" "01" "69" [[4]] [1] "01" "02" "69" [[5]] [1] "02" "01" "92"
(ap2 <- lapply(ap1, function(x) if(x[3] < 12) c(x[1:2], paste("20", x[3], sep="")) else c(x[1:2], paste("19", x[3], sep="")))) [[1]] [1] "12" "30" "1968"
[[2]] [1] "12" "31" "1968" [[3]] [1] "01" "01" "1969" [[4]] [1] "01" "02" "1969" [[5]] [1] "02" "01" "1992"
(ap3 <- unlist(lapply(ap2, function(x) paste(x, collapse="/")))) [1] "12/30/1968" "12/31/1968" "01/01/1969" "01/02/1969" "02/01/1992"
as.Date(ap3, "%m/%d/%Y") [1] "1968-12-30" "1968-12-31" "1969-01-01" "1969-01-02" "1992-02-01"
On Tue, 25 Sep 2012, "Conceição - UNESP Rio Claro, SP" wrote:
Prezados membros, Saudações, Estou tendo dificuldade com a conversão de formatos no comando as.Date (que entendo é diferente do as.date, d minúsculo). Segue abaixo: 1 - comandos dates <- c( "12/30/68","12/31/68", "01/01/69", "01/02/69", "02/01/92") as.Date(dates, "%m/%d/%y") # MÊS/DIA/ANO Quero transformar para ano = 4 dígitos 2- resultados
dates <- c( "12/30/68","12/31/68", "01/01/69", "01/02/69", "02/01/92")
as.Date(dates, "%m/%d/%y") [1] "2068-12-30" "2068-12-31" "1969-01-01" "1969-01-02" "1992-02-01"
Para datas anteriores a 31/12/1968 ele transforma o ano 68 em 2068 ao invés de 1968. Não sei como resolver. -- Atenciosamente, Profa. Dra. Maria da Conceição F. Freitas Tandel UNESP - IGCE- DEMAC RIO CLARO, SP
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Segue algumas opções em complemento as soluções do PJ. No entanto, eu acredito que a melhor solução seria aquela em que fosse possível mudar o POSIX standards que considera prefixo 20 para anos no 00-68 e 19 para 69-99, o ideal seria mudar o 69 para 13 (2013), por exemplo. Não consegui descobrir como fazer. dates <- c("12/30/68","12/31/68", "01/01/69", "01/02/69", "02/01/92") as.Date(dates, "%m/%d/%y") # solução 1, caso só tenha um século (19??) # inserir o 19 antes dos dois útimos digitos gsub("(.*/)(\\d{2}$)", "\\119\\2", dates) # solução 2, caso tenha anos de dois séculos (19?? e 20??) # testar se ano entre 0 e 12 para preceder com 20, em cc colocar 19 dates2 <- as.Date(dates, "%m/%d/%y") century <- ifelse(as.numeric(strftime(dates2, "%y"))<12, 20, 19) dates3 <- paste(century, strftime(dates2, "%y-%m-%d"), sep="") dates4 <- as.Date(dates3) À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
participantes (3)
-
"Conceição - UNESP Rio Claro, SP"
-
Paulo Justiniano
-
Walmes Zeviani