Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyCvičebnice jazyka R Dokumentace k základním funkcím as.date

as.date

Funkce převodu data na znak a ze znaku

as.Date {base} Dokumentace R v češtině

Popis

Funkce pro převod mezi reprezentacemi znaků a objekty třídy "Date" představující data kalendáře.

Použití

as.Date(x, ...) ## S3 metoda pro třídu 'character'
as.Date(x, format, tryFormats = c("%Y-%m-%d", "%Y/%m/%d"),
optional = FALSE, ...)
## S3 metoda pro třídu 'numeric'
as.Date(x, origin, ...)
## S3 metoda pro třídu 'POSIXct'
as.Date(x, tz = "UTC", ...)

## S3 metoda pro třídu 'Date'
format(x, ...)

## S3 metoda pro třídu 'Date'
as.character(x, ...)

Argumenty

x

objekt, který má být konvertován.

format

znakový řetězec. Není-li zadáno, vyzkouší tryFormats jeden po druhém na prvním prvku, který není NA , a pokud nefunguje žádný, vrátí chybu. V opačném případě je zpracování přes strptime.

tryFormats

znakový vektor řetězců format, který se má zkusit, jestli format není specifikován.

optional

logical indikující návrat NA (namísto signalizace chyby), pokud se nepodaří uhodnout formát.

origin

objekt Date, nebo něco, co může být konvertováno použitím as.Date(origin, ...) na takový objekt.

tz

název časového pásma.

...

další argumenty, které mají být předány do nebo z jiných metod, včetně format pro metody as.character a as.Date.

Detaily

Obvyklé pravidla pro recyklování vektorů se vztahují na x a format, takže odpověď bude mít délku delšího z vektorů.

V případě potřeby a dostupnosti se používají konverze do a z řetězců znaků specifické pro daný jazyk. To ovlivňuje názvy dnů a měsíců.

Metody as.Date přijímají znakové řetězce, faktory, logické NA a objekty tříd "POSIXlt" a "POSIXct". (Poslední je převedena na dny ignorováním času po půlnoci ve znázornění času ve specifikované časové zóně, výchozí UTC.) Také objekty třídy "date" (z balíčku date) a "dates" (z balíčku chron). Znakové řetězce jsou zpracovávány tak, jak je to nutné pro zadaný formát: všechny koncové (trailing) znaky jsou ignorovány.

as.Date přijme číselné údaje (počet dnů od určité epochy), ale pouze pokud je dodán origin.

Metody format a as.character ignorují jakoukoli zlomkovou část data.

Hodnota

Metody format a as.character vrací znakový vektor, který představuje datum. Data NA jsou vrácena jako NA_character_.

Metody as.Date vrací objekt třídy "Date".

Konverze z jiných systémů

Většina systémů interně zaznamenává data jako počet dní od nějakého počátku, ale to se spojuje s problémy, včetně

  • Je počátek den 0 nebo den 1? Jak ukazují ‘Příklady’, Excel dokáže použít obě možnosti pro své dva datové systémy.

  • Pokud je počátek dostatečně dávno, mohou návrháři projevit svou nevědomost o kalendářových systémech. Například navrhovatel aplikace Excel považoval 1900 za přestupný rok (tvrdil, že zkopíroval chybu z dřívějších tabulek DOS) a navrhovatel Matlabu si vybral neexistující datum ‘leden 0, 0000’ (takový den neexistuje), aniž by specifikoval kalendář. (Existuje takový rok v ‘gregoriánském’ kalendáři, jak je používán v ISO 8601: 2004, ale to říká, že se pro roky před rokem 1582 má používat pouze se souhlasem stran při výměně informací.)

Jediným bezpečným postupem je kontrola ostatních hodnot systémů pro známá data: zprávy na internetu (včetně R-help) jsou častěji nesprávné než správné.

Poznámka

Výchozí formáty se řídí pravidly mezinárodního standardu ISO 8601, který vyjadřuje den jako "2001-02-03".

Pokud řetězec data úplně nespecifikuje datum, vrácená odpověď může být specifická pro systém. Nejčastějším chováním je předpokládat, že chybějící rok, měsíc nebo den je aktuální. Pokud nesprávně určí datum, spolehlivé implementace vrátí chybu a datum je uvedeno jako NA. Bohužel některé běžné implementace (například jako glibc) jsou nespolehlivé a zamýšlený význam hádají.

Roky před 1CE (aka 1AD) se pravděpodobně nebudou zpracovávat správně.

Reference

International Organization for Standardization (2004, 1988, 1997, ...) ISO 8601. Data elements and interchange formats – Information interchange – Representation of dates and times. Pro odkazy na verze dostupné on-line viz (v době psaní) http://www.qsl.net/g1smd/isopdf.htm.

Viz také

Date pro podrobnosti o datové třídě; locales pro zjištění nebo nastavení místních nastavení.

Na stránkách nápovědy vašeho systému na stránkách strftime a strptime se dozvíte, jak specifikovat jejich formáty. Uživatelé systému Windows nenajdou stránku s nápovědou pro strptime: používá se kód založený na glibc (s opravami), takže jsou zde podporovány všechny specifikátory formátu zde popsané, ale v žádném místním nastavení nejsou k dispozici žádná alternativní reprezentace čísel ani éry.

Příklady

## verze daného data specifická pro místní nastavení
format(Sys.Date(), "%a %b %d")

## číst informace o datu ve formátu 'ddmmmyyyy'
## Tohle v některých místních nastaveních vrátí NA(s); nastavení místních nastavení C
## tohle se překoná u většiny systémů jako v komentovaných řádcích
## lct <- Sys.getlocale("LC_TIME"); Sys.setlocale("LC_TIME", "C")
x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
z <- as.Date(x, "%d%b%Y")
## Sys.setlocale("LC_TIME", lct)
z

## číst informace o datech a časech ve formátu 'm/d/y'
dates <- c("02/27/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92")
as.Date(dates, "%m/%d/%y")

## datum uvedený jako počet dnů od 1900-01-01 (datum v roce 1989)
as.Date(32768, origin = "1900-01-01")
## Aplikace Excel používá 1900-01-01 jako den 1 (výchozí ve Windows) nebo
## 1904-01-01 jako den 0 (výchozí na Mac), ale to je komplikované aplikací Excel,
## která nesprávně zachází s rokem 1900 jako s přestupným rokem.
## Takže pro data (po roce 1901) z Windows Excel
as.Date(35981, origin = "1899-12-30") # 1998-07-05
## a Mac Excel
as.Date(34519, origin = "1904-01-01") # 1998-07-05
## (tyto hodnoty pocházejí z from http://support.microsoft.com/kb/214330)

## Experiment ukazuje, že počátek v Matlabu je 719529 dní před naším,
## (považuje neexistující 0000-01-01 za den 1),
## takže Matlab den 734373 může být importován jako
as.Date(734373, origin = "1970-01-01") - 719529 # 2010-08-23
## (hodnota z
## http://www.mathworks.de/de/help/matlab/matlab_prog/represent-date-and-times-in-MATLAB.html)

## Efekt časového pásma
z <- ISOdate(2010, 04, 13, c(0,12)) # půlnoc a poledne UTC
as.Date(z) # in UTC
## názvy těchto časových pásem jsou běžné
as.Date(z, tz = "NZ")
as.Date(z, tz = "HST") # Hawaii

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity