1) Chrońmy. chron domyślnie używa 30, więc konwertuje je najpierw na Data (ponieważ chron nie może odczytać tego rodzaju dat), zmieniając format na postaci z dwucyfrowymi latami w format, który chron może zrozumieć i ostatecznie wrócić do daty.
library(chron)
xx <- c("01AUG11", "01AUG12", "01AUG13") # sample data
as.Date(chron(format(as.Date(xx, "%d%b%y"), "%m/%d/%y")))
To daje odcięcia od 30, ale możemy uzyskać odcięcie 13 Korzystanie chron.year.expand
opcję Crohna:
library(chron)
options(chron.year.expand =
function (y, cut.off = 12, century = c(1900, 2000), ...) {
chron:::year.expand(y, cut.off = cut.off, century = century, ...)
}
)
a następnie powtórzenie oryginalnego konwersję. Na przykład zakładając, że zabrakło tego oświadczenia opcji już chcemy uzyskać następujące z naszych xx
:
> as.Date(chron(format(as.Date(xx, "%d%b%y"), "%m/%d/%y")))
[1] "2011-08-01" "2012-08-01" "1913-08-01"
2) Data tylko. Oto alternatywa, która nie używa chron. Może chcesz zastąpić "2012-12-31"
z Sys.Date()
jeśli chodzi o to, że w przeciwnym razie przyszłe terminy są naprawdę należy ustawić 100 lat wstecz:
d <- as.Date(xx, "%d%b%y")
as.Date(ifelse(d > "2012-12-31", format(d, "19%y-%m-%d"), format(d)))
EDIT: daty dodania jedyne rozwiązanie.
+1 dla Data jedynym rozwiązaniem – russellpierce
+1 jednak pewien wyjątek Datą tylko rozwiązanie: wyjście nie jest już klasa Date, ale postać, więc arytmetyka będzie wymagać transformacja wsteczna wyjścia. Oy vey. – AdamO
Jest to forma 'as.Date (...)' tak wyraźnie jest z klasy 'Date'. –