2011-07-29 6 views
11

Probablemente estoy haciendo algo estúpido y no verlo, pero:R strptime año y mes sin delimitador de regresar NA

> strptime("201101","%Y%m") 
[1] NA 

De ayuda strptime:

% Y Año con siglo
% m mes como número decimal (01-12)

+0

Encontraste la falla de documentación con * 'strptime' * ese año-mes-día debe ser suministrado, lo cual nunca aparece en ninguna parte: *" Para strptime la cadena de entrada no necesita especificar la fecha completamente: se asume que no especificada segundos, minutos u horas son cero, y un año, un mes o un día no especificado es el actual. "* – smci

Respuesta

12

Sólo tienes que pegar un campo de día (por ejemplo, "01") que usted no hace caso:

R> shortdate <- "201101" 
R> as.Date(paste(shortdate, "01", sep=""), "%Y%m%d") 
[1] "2011-01-01" 
R> 

prefiero as.Date() para conocer las fechas y strptime() para POSIXct objetos, fechas y horarios decir.

continuación, puede convertir el Date objeto analizado en un objeto para recuperar POSIXlt año y mes:

R> mydt <- as.Date(paste(shortdate, "01", sep=""), "%Y%m%d") 
R> myp <- as.POSIXlt(mydt) 
R> c(myp$year, myp$mon) 
[1] 111 0 
R> 

Este es un comportamiento POSIX estándar con año como "año - 1900" y meses como indexados a cero.

+0

así que en R no se puede decir que no hay un dígito de día, tiene que inyectar la suposición de 01. extraño. – userJT

Cuestiones relacionadas