2011-07-29 11 views
11

Jestem prawdopodobnie robi coś głupiego i nie widząc go, ale:R strptime rok i miesiąc z nr ogranicznik powrocie NA

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

help strptime:

% Y Rok z wiekiem
% m miesiąc jako liczba dziesiętna (01-12)

+0

Znalazłeś błąd w dokumentacji z * 'strptime' * że rok-miesiąc-dzień musi być dostarczony, co nigdy nie jest nigdzie stwierdzone: *" Dla strptime ciąg wejściowy nie musi określać daty całkowicie: przyjmuje się, że nieokreślona sekundy, minuty lub godziny są zerowe, a nieokreślony rok, miesiąc lub dzień jest bieżącym. "* – smci

Odpowiedz

12

Wystarczy wkleić do pola dzień (powiedzmy, "01"), które ignorujesz:

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

Wolę as.Date() dat i strptime() dla POSIXct obiektów, czyli daty i godziny.

można następnie przekształcić analizowany Date obiektu do POSIXlt obiektu odzyskać rok i miesiąc:

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> 

Jest to standardowe zachowanie POSIX z lat jako „rok - 1900” i miesiącach jako zero-indeksowane.

+0

, więc w R nie można powiedzieć, że nie ma cyfry dnia, trzeba wstrzyknąć założenie 01. dziwne. – userJT

Powiązane problemy