Ta strona wykorzystuje ciasteczka ("cookies") w celu zapewnienia maksymalnej wygody w korzystaniu z naszego serwisu. Czy wyrażasz na to zgodę?

Czytaj więcej
< All Topics
Print

Data i czas

Obiekty klasy Date i POSIXt tworzone z poszczególnych jednostek czasu

 

Używane w różnych sytuacjach daty, mają nie do końca określona formę. Format mm/dd/y używany jest w Stanach Zjednoczonych a dd/mm/y poza Stanami Zjednoczonych, gdzie dd to dzień, mm to miesiąc, a y jest rokiem zapisanym 4 cyframi lub dwoma – dwie ostatnie cyfry roku, zazwyczaj drugiej połowy XX wieku. Równorzędnie rozpoczyna się pisanie daty od roku – y/mm/dd, (rzadziej y/dd/mm), co ułatwia np. porządkowanie dokumentów względem czasu ich podpisania. To formatowanie z myślnikami jako separatorami stosowany jest przez R. Separatorami elementów daty obok / mogą być kropki, pauzy lub myślniki. Godzina jest prawie zawsze pisana jako gg:mm:ss, gdzie gg to godzina, mm to minuty, a ss to sekundy. Niekiedy stosuje się inny separator niż dwukropek. W krajach anglosaskich godziny są liczone od 1 do 12, a po frazie określające czas dodaje się AM, gdy są to godziny przedpołudniowe lub PM, gdy czas dotyczy godzin po południu. Niekiedy trzeba do daty dodać jeszcze strefę czasową, zwłaszcza gdy porównuje się czas zdarzeń zachodzących w różnych miejscach kuli ziemskiej. Dla wielu stref trzeba także odróżnić czas zimowy od czasu letniego. Uwzględnienie tego wszystkiego powoduje, że określenie czasu cechuje się wieloma zmiennymi (od 6 do 8 dla jednej i tej samej strefy czasowej. Są to rok, miesiąc, dzień, godzina, minuta i sekunda. Siódma pozycja obejmuje rozróżnienie godzin przedpołudniowych i popołudniowych, ósma oznacza strefę czasową, która ma różne oznaczenia dla czasu letniego i zimowego.

Rok, miesiąc, dzień, godzina, minuta i sekunda danego zdarzenia najczęściej zapisuje się osobno nadając tym wielkościom liczby całkowite o umownie określonym zakresie. Funkcje, które pozwalają na połączenie tych danych i utworzenie obiektów, za którymi kryje się czas w postaci liczb to ISOdate() i ISOdatetime().

> ISOdate(year=2023, month=04, day=15, hour=13, min=23, sec=45)
[1] “2023-04-15 13:23:45 GMT”
> ISOdate(year=2023, month=04, day=15, hour=13, min=23, sec=45, tz=””)
[1] “2023-04-15 13:23:45 CEST”
> ISOdatetime(year=2023, month=04, day=15, hour=13, min=23, sec=45)
[1] “2023-04-15 13:23:45 CEST”

Funkcja ISOdate() ma wpisaną domyślnie strefę czasową (tz od time zone) “GMT” (Greenwich Mean Time, strefa południka 0) i aby operować strefą czasową odczytywaną z systemu operacyjnego należy dopisać opcję tz=””. W Polsce zazwyczaj używamy lokalnej strefy czasowej, czyli CET (od Central European Time), a latem CEST (Central European Summer Time). Skróty do poszczególnych stref czasowych, z których większość obowiązuje w R, można odczytać na stronie https://en.wikipedia.org/wiki/List_of_tz_database_time_zones w kolumnie “Time zone abbreviation”.

 

Gdy do funkcji ISOdate() i ISOdatetime() wpiszemy same liczby w liczbie sześciu zostaną one potraktowane w kolejności jako rok, miesiąc, dzień, godzina, minuta i sekunda.

> ISOdate(2023, 04, 15, 13, 23, 45, tz=””)
[1] “2023-04-15 13:23:45 CEST”
> ISOdate(hour=13, min=23, sec=45, day=15, month=04, year=2023, tz=””)
[1] “2023-04-15 13:23:45 CEST”
> ISOdate(13, 23, 45, 15, 04, 2023, tz=””)
[1] NA

Każda nieistniejąca data i czas zostaje przez funkcje generujące daty przetworzona na NA. Opcja tz słuzy do określania strefy czasowej. Wartość tz=”” oznacza strefę czasową odczytaną z systemu komputerowego jako aktualną. Gdy pracujemy na nieznanym komputerze możemy sprawdzić, jaka jest w nim aktualna strefa czasowa nie wychodząc z R, za pomoca funkcji Sys.timezone().

> Sys.timezone()
[1] “Europe/Warsaw”
> ISOdate(2023, 04, 15, 13, 23, 45, tz=”America/Los_Angeles”)
[1] [1] “2023-04-15 13:23:45 PDT”

Wydaje się, że funkcje ISOdate() i ISOdatetime() tworzą obiekty tekstowe. Nie jest to do końca prawdą. Posłużą do tego funkcje badające typ i strukturę obiektu: mode(), typeof(), class() i str().

> x=ISOdate(year=2023, month=04, day=15, hour=13, min=23, sec=45)
> mode(x)
[1] “numeric”
> typeof(x)
[1] “double”
> class(x)
[1] “POSIXct” “POSIXt”
> str(x)
POSIXct[1:1], format: “2023-04-15 13:23:45”

Obiekt ten ma strukturę tekstowo-liczbową. Ukrycie liczby za formułami czasu ma logiczny sens, jako że czas jest zmienną ciągłą, którą można wyrazić liczbami rzeczywistymi. Jednostką jego pomiaru w układzie SI jest sekunda, którą odwrotność wylicza się jako odwrotność częstotliwości promieniowania przejścia kwantowego między dwoma nadsubtelnymi poziomami atomu cezu 133 w stanie podstawowym: ΔV(Cs) = 9 192 631 770 Hz. Aby móc wyliczać czas tak, jak to pokazuje się na wykresach w okładzie współrzędnych kartezjańskich, potrzebne jest ustalenie punktu zerowego. Ustalono taki punkt dla całego świata skomputeryzowanego o czym będzie mowa w następnym podrozdziale.

Klasa obiektów wyświetlających zrozumiałą datę i czas, ale za którymi kryją się liczby rzeczywiste oznaczające czas liczony w sekundach nazywana jest powszechnie POSIXt, choć program R podaje nazwę dwuczłonową: POSIXct POSIXt.

 

Data i czas jako liczby

 

Daty i czas w R są liczbami całkowitymi, a dokładnie data jest to liczba dni począwszy od dnia 01-01-1970 z ujemnymi wartościami dla dat wcześniejszych. Natomiast czas, to liczba sekund, jaka upłynęła od godziny 00:00:00 wspomnianej wcześniej doby na południku 0, czyli w strefie czasowej BST (British Summer Time). Wszystkie operacje na datach to operacje na liczbach, które się za nimi kryją. Towarzyszy im szereg funkcji przekształcających te liczby na zrozumiały format tekstowy daty i czasu. W innych strefach czasowych czas komputerowy rozpoczął się odpowiednio później (na półkuli wschodniej) lub wcześniej (na półkuli zachodniej) względem ich lokalnych pomiarów czasu. Według czasu w Polsce była to godzina 01:00:00.

Aby zobaczyć ile dni minęło od dnia 01.01.1970 do dnia 21.03.2021 należy użyć funkcji as.Date(), która przekształca tekst w postaci “rok-miesiąc-dzień” lub “rok/miesiąc/dzień” na format typu data. Zobaczmy jak to wygląda:

> x=as.Date(“1970-01-01”)
> as.numeric(x)
[1] 0
> x=as.Date(“2021-03-21”)
> as.numeric(x)
[1] 18707
> 51*365+12+31+28+21 #Liczba.lat*365+12 od lat przestępnych+dni.stycznia2021+dni.lutego2021+21
[1] 18707

Datę w formacie tekstowym podaje się R-owi w postaci rok/miesiąc/dzień lub rok-miesiąc-dzień. Gdy daty zapisane zostały w innym formacie należy użyć opcji format.

> as.Date(“21-03-2021”)
[1] “0021-03-20”
as.Date(“21-03-2021″, format=”%d-%m-%y”)
[1] “2020-03-21”
> as.Date(“21.3.99″, format=”%d.%m.%y”)
[1] “1999-03-21”

Czas podawany jest poprzez datę i zestaw godzina:minuta:sekunda określone w systemie sześćdziesiątkowym, ale zapisane zwykłymi liczbami arabskimi. Przekształca się go na liczbę sekund od godziny 1:00:00 w dniu 01-01-1970 za pomocą funkcji as.POSIXct().

> x=as.POSIXct(“1970/01/01 00:00:00”)
> as.numeric(x)
[1] -3600
> x=as.POSIXct(“1970/01/01 01:00:00”)
> as.numeric(x)
[1] 0
> x=as.POSIXct(“2021/03/21 15:35:10”)
> as.numeric(x)
[1] 1616337310
> 18707*24*60*60+14*60*60+35*60+10 #L.sekund w 18707 dniach+L.sekund od 01:00:00 do 15:35:10
[1] 1616337310

Złożenie funkcji as.numeric(as.POSIXct()) wyznacza liczbę względem czasu lokalnego.

Żeby odkryć, jaka data kryje się za jakąś liczbą, należy użyć funkcji as.Date() z opcją origin=, w której trzeba zapisać “1970-01-01”. Wyświetla się wtedy data o podaną liczbę dni późniejsza po wprowadzonym do R dniu. Wygląda to następująco:

> as.numeric(as.Date(“2021-03-21”))
[1] 19707
> as.Date(18707)
Błąd w poleceniu ‘as.Date.numeric(18707)’:
argument ‘origin’ musi zostać dostarczony
> as.Date(18707, origin = “1970-01-01”)
[1] “2021-03-21”
> as.Date(18707, origin = “1980-01-01”)
[1] “2031-03-21”

Funkcja as.POSIXct() ma także opcję origin ale występuje pewna nieprawidłowość:

> as.POSIXct(0, origin=”2021-03-21 16:36:10″)
[1] “2021-03-21 17:36:10 CET”
> as.POSIXct(-3600, origin=”2021-03-21 16:36:10″)
[1] “2021-03-21 16:36:10 CET”

Być może twórcy funkcji as.POSIXct() wymusili pisanie w opcji origin czasu dla strefy czasowej BST (południka zerowego). Daje to w sumie następujące efekty:

> as.numeric(as.POSIXct(“2021-05-21 16:36:10”))
[1] 1621607770
> as.POSIXct(1621607770, origin=”1970-01-01 01:00:00″)
[1] “2021-05-21 17:36:10 CET”
> as.POSIXct(1621607770, origin=”1970-01-01 00:00:00″)
[1] “2021-05-21 16:36:10 CET”

W naszej strefie czasowej posługując się funkcją as.POSIXct() (a także as.POSIXlt()) z opcją origin zapisaną w formie daty i czasu, trzeba od wyniku odejmować godzinę. Na szczęście poprawne wyniki można uzyskać prościej, za pomocą funkcji difftime().

 

Odczytywanie aktualnej daty i czasu

 

W komputerach w latach 80-tych zaczęto umieszczać zegary systemowe, przydatne i powszechnie wykorzystywane narzędzia do określania czasu utworzenia lub modyfikacji różnych plików. Większość programów ma funkcje automatycznego odczytywania czasu systemowego, gdyż można w ten sposób sprawdzać, w których momentach program wykonywał określone etapy jakiegoś programu. Do odczytywania aktualnego czasu w R służą funkcje: date(), Sys.Date(), Sys.time(). Pokazują on datę i czas w różnych formatach.

Aktualną datę (jaka jest wpisana do systemu) odczytamy w R za pomocą funkcji Sys.Date() oraz Sys.time().

> date()
[[1] “Thu Apr 13 13:19:26 2023”
> Sys.Date()
[1] “2023-04-13”
> Sys.time()
[1] “2023-04-13 13:19:26 CEST”
> as.numeric(Sys.time())
[1] 1681384922

Liczby, które kryją sią za aktualnymi datami i czasem, wyrażanymi w sekundach, używane są jako tzw. seed, czyli inicjator w funkcjach generujących liczby losowe. Powoduje to, że programy używające takich funkcji, za każdym uruchomieniem generują inne wyniki.

 

Określanie formatu zapisu daty i czasu

 

Niemal identycznie jak as.POSIXct() działają funkcje as.POSIXlt() oraz strptime(), aczkolwiek tworzą ona datę w złożonym formacie, zwanym listą, o którym mowa będzie później. Ponadto funkcja strptime() zawsze wymaga wstawienia opcji format.

 

> x=as.POSIXlt(“2021/03/21 15:35:10”)
> mode(x)
[1] “list”
> typeof(x)
[1] “list”
> class(x)
[1] “POSIXlt” “POSIXt”
> as.numeric(x)
[1] 1616337310

> x=strptime(“2021/03/21 15:35:10”)
Błąd w poleceniu ‘strptime(“2021/03/21 15:35:10”)’:
brakuje argumentu ‘format’, a nie ma określonej wartości domyślnej
> x=strptime(“2021/03/21 15:35:10″, format=”%Y/%m/%d %H:%M:%S”)
> mode(x)
[1] “list”
> typeof(x)
[1] “list”
> class(x)
[1] “POSIXlt” “POSIXt”
> as.numeric(x)
[1] 1616337310

W opcji format=”” należy wpisać sposób w jakim zapisano datę i czas w formacie tekstowym. Skrót %Y oznacza rok zapisany 4 cyframi, %y – rok zapisany dwoma cyframi, %m – miesiąc, %d – dzień, %H – godzina, %M – minuta, %S sekunda. Między nimi należy wstawić te przerywniki, które są wprowadzone w formacie tekstowym. Czasami mamy zapis czasu w innej postaci niż godzina:minuta:sekunda. Na przykład, zamiast dwukropka są średniki albo pomiar wykonywany był z dokładnością do minut i brak jest ostatniego członu czasu. Wtedy także pomaga opcja format.

> as.POSIXct(“2021/03/21 15;35”)
[1] “2021-03-21 CET”
> as.POSIXct(“2021/03/21 15;35″, format=”%Y/%m/%d %H;%M”)
[1] “2021-03-21 15:35:00 CET”

W krajach angielskojęzycznych operuje się czasem, w którym godziny podaje się liczbami od 1 do 12, a po zapisie czasu dodaje się “AM”, gdy czas dotyczy godzin przedpołudniowych lub “PM”, gdy czas dotyczy godzin popołudniowych. Wtedy w godzina ma symbol %I, a odczytanie “PM” lub “AM” następuje po zastosowaniu symbolu %p. Wygląda to następująco:

> x= “15/03/2023 10:16:12 PM”
> as.POSIXct(x, format=”%d/%m/%Y %I:%M:%S %p”)
[1] “2023-03-15 22:16:12 CET”
> as.POSIXlt(x, format=”%d/%m/%Y %I:%M:%S %p”)
[1] “2023-03-15 22:16:12 CET”
> strptime(x, format=”%d/%m/%Y %I:%M:%S %p”)
[1] “2023-03-15 22:16:12 CET”

Określenia pory dnia “AM i “PM” mogą być pisane małymi literami, albo w sposób mieszany (jedna litera duża, druga mała). Rezultat przekształcania takich danych tekstowych na datę i czas jest taki sam.

W drugiej połowie XX wieku rok w datach podawano powszechnie pisząc dwie jego ostatnie cyfry. Obecnie widząc tak zapisaną datę nie wiemy, czy odnosi się ona do XX czy XXI wieku. Potrzebne do tego są dodatkowe wskazówki. Tymczasem funkcje as.POSIXct() i as.POSIXlt() i strptime() wstawiają w to miejsce 20, gdy rok jest mniejszy od 69 i 19, gdy rok jest równy 69 lub większy. Wszystkie te funkcje potrzebują uzupełnienia opcji format.

> as.POSIXct(“68/12/31 14:31:10”)
[1] “0068-12-31 14:31:10 LMT”
> as.POSIXct(“68/12/31 14:31:10″,format=”%y/%m/%d %H:%M:%S”)
[1] “2068-12-31 14:31:10 LMT”
> as.POSIXct(“69/01/01 00:00:01″, format=”%y/%m/%d %H:%M:%S”)
[1] “1969-01-01 00:00:01 CET”
> strptime(“68/01/01 23:59:59″, format=”%y/%m/%d %H:%M:%S”)
[1] “2068-01-01 23:59:59 CET”
> strptime(“69/01/01 00:00:00″, format=”%y/%m/%d %H:%M:%S”)
[1] “1969-01-01 00:00:01 CET”

Operowanie tylko godziną, minutą i sekundą uniemożliwia utworzenie obiektu klasy POSIXt poprzez funkcje as.POSIXct i as.POSIXlt, chyba, że doda się do nich opcję format=”%H:%M:%S”. Wszystkie te funkcje dodają wtedy aktualną datę odczytaną z systemu operacyjnego.

> as.POSIXct(“14:31:10”)
Błąd w poleceniu ‘as.POSIXlt.character(x, tz, …)’:
łańcuch tekstowy nie jest w standardowym jednoznacznym formacie

> as.POSIXct(“14:31:10″, format=”%H:%M:%S”)
[1] “2023-04-14 14:31:10 CEST”
> as.POSIXlt(“14:31:10″, format=”%H:%M:%S”)
[1] “2023-04-14 14:31:10 CEST”
> strptime(“14:31:10″, format=”%H:%M:%S”)
[1] “2023-04-14 14:31:10 CEST”

W dalszym ciągu ograniczymy się do pokazywania wyników dla funkcji as.POSIXct().

 

Operacje możliwe dla daty i czasu

 

Funkcje as.Date() i as.POSIXct() zamieniające datę i czas na liczby pozwalają na błyskawiczne wyliczenia odstępu czasowego w dniach między różnymi datami. Jednocześnie twórcy R zadbali by nie można było dodawać dat i wykonywać nie zawsze sensownych działań na datach.

> x1=as.Date(“1999-01-12”)
> x2=as.Date(“1981-05-22”)
> x3=as.Date(“2013-03-14”)

> min(x1,x2,x3)
[1] “1981-05-22”
> max(x1,x2,x3)
[1] “2013-03-14”
> sort(x1,x2,x3)
Błąd w poleceniu ‘sort(x1, x2, x3)’:
‘decreasing’ musi być wektorem logicznym o długości 1.
Czy chciałeś ustawić ‘partial’?

Normalnie funkcja sort() porządkuje dane od najmniejszej do największej, ale powinny one tworzyć strukturę zwaną wektorem. Będzie jej poświęcony kolejny rozdział.

Najczęściej format danych typu Date wykorzystywany jest, aby wyliczyć czas między dwoma datami. Podawany jest on w dniach.

> x1=as.Date(“1999-01-12”)
> x2=as.Date(“1981-05-22”)
> x1-x2
Time difference of 6444 days
> x2+6444
[1] “1999-01-12”
> x1+x2
Błąd w poleceniu ‘`+.Date`(x1, x2)’:
dwuargumentowy operator ‘+’ nie jest określony dla obiektów klasy “Date”

Sumy dni, które upłynęły po 1.01.1970, można od biedy zsumować, ale po co? Sumowanie dat jest bezsensowne. Mówi o tym wygenerowany komunikat.

Podobne operacje można wykonać dla wielkości określającej datę i czas.

> x1=as.POSIXct(“1999-01-12 01:00:00”)
> x2=as.POSIXct(“1999-05-22 08:30:00”)
> x3=as.POSIXct(“1999-05-21 15:45:00”)
> x4=as.POSIXct(“1999-05-21 16:10:50”)
> x5=as.POSIXct(“1999-05-21 16:11:11”)

> min(x1,x2,x3,x4)
[1] “1999-01-12 01:00:00 CET”
> x2-x1
Time difference of 130.2708 days
> x2-x3
Time difference of 16.75 hours
> x4-x3
Time difference of 25.83333 mins
> x5-x4
Time difference of 21 secs
> x1+x2
Błąd w poleceniu ‘`+.POSIXt`(x1, x2)’:
dwuargumentowy operator ‘+’ nie jest określony dla obiektów klasy “POSIXt”

Czas między dwoma datami i obiektami klasy POSIXt można wyliczyć za pomocą funkcji difftime().

> x1=as.Date(“1999-01-12”)
> x2=as.Date(“1981-05-22”)
> difftime(x1,x2)
Time difference of 6444 days
> x1=as.POSIXct(“1999-01-12 01:00:00”)
> x2=as.POSIXct(“1999-05-22 08:30:00”)
> x3=as.POSIXct(“1999-05-21 15:45:00”)
> x4=as.POSIXct(“1999-05-21 16:10:50”)
> x5=as.POSIXct(“1999-05-21 16:11:11”)
> difftime(x2,x1)
Time difference of 130.2708 days
> difftime(x2,x1,units=”hours”)
Time difference of 3126.5 hours
> difftime(x2,x3)
Time difference of 16.75 hours
> difftime(x2,x3,units=”secs”)
Time difference of 60300 secs
> difftime(x4,x3)
Time difference of 25.83333 mins
> difftime(x5,x4)
Time difference of 21 secs

Zastosowanie funkcji difftime() umożliwia kontrolę nad jednostkami czasu, w jakim ma zostać podany wynik. Należy zastosować opcję units, której wartościami mogą być: “days”, “hours”, “mins” i “secs”.

Zobaczmy, co się stanie, gdy do wielkości o typie POSIXct dodamy jakąś liczbę.

> x1=as.POSIXct(“1999-01-12 01:00:00”)
> x2=as.POSIXct(“1999-05-22 08:30:00”)
> x2-x1
Time difference of 130.2708 days
> x1+130
[1] “1999-01-12 01:02:10 CET”
> x1+130.2708
[1] “1999-01-12 01:02:10 CET”
> x1+130.99
[1] “1999-01-12 01:02:10 CET”
> x1+131
[1] “1999-01-12 01:02:11 CET”
> x1+130.2708*24*60*60
[1] “1999-05-22 08:29:57 CEST”
> x1+130.2709*24*60*60
[1] “1999-05-22 08:30:05 CEST”
> x1+130.27084*24*60*60
[1] “1999-05-22 08:30:00 CEST”

Dodawanie liczby do obiektu typu POSIXct powoduje, ze odcięta zostaje cała część dziesiętna, a to co zostaje potraktowane jest jak liczba sekund. Oznacza to czasami konieczność przeliczenia dni, godzin i minut na sekundy (co na szczęście w przypadku dni, godzin i minut jest jednoznaczne w przeciwieństwie do liczby dni w miesiącu lub roku).

 

Wyciąganie informacji z obiektów o formacie daty i czasu

 

Za każdą datą kryje się jakiś dzień tygodnia, pora roku, numer dnia od początku roku itd. Najtrudniej jest zgadnąć, jaki dzień tygodnia odpowiada określonej dacie. W R służy do tego funkcja weekdays(), która dla każdej daty pokazuje dzień tygodnia.

> x=as.Date(“1999-01-17”)
> weekdays(x)
[1] “niedziela”
> x=as.POSIXct(“1999-01-17 10:28:33”)
> weekdays(x)
[1] “niedziela”

Czasami chcemy mieć datę zapisaną w inny sposób niż to jest standardem w R. Można to uzyskać za pomocą funkcji format() i odpowiednio zapisanych opcji. Wygląda to następująco:

> x=as.Date(“1999-01-17”)
> format(x, “%A %d %B %Y”)
[1] “niedziela 17 styczeń 1999”
> format(x, “%j”) #Numer dnia roku
[1] “017”
> format(x, “%U, %W”) #Numer tygodnia roku
[1] “03, 02”

Ostatnie działanie dało różne odpowiedzi dla opcji %U i %W, gdyż pierwsza z nich dotyczy tygodni liczonych od niedzieli, a druga tygodni liczonych od poniedziałku. Wszystkie opcje jakie można wpisać w funkcji format podaje poniższa tabela.

Opcja Opis
%a Skrócona nazwa tygodnia
%A Pełna nazwa tygodnia
%b lub %h Skrócona nazwa miesiąca
%B Pełna nazwa miesiąca
%d dzień miesiąca
%j dzień
%m numer miesiąca
%u numer dnia tygodnia (0:6) z niedzielą mającą numer 0
%w numer dnia tygodnia (1:7) z niedzielą mająca numer 7
%U numer tygodnia roku z niedzielą jako pierwszym dniem
%W numer tygodnia roku z poniedziałkiem jako pierwszym dniem
%y rok bez wieku (2 ostatnie cyfry roku)
%Y rok z wiekiem (4 cyfry roku)
%C wiek (2 pierwsze cyfry roku)
%x data w formacie określonym przez system
%D data według formatu amerykańskiego (mm/dd/yyyy)

Możemy też wyciągać informacje o godzinie, minucie i sekundzie danego czasu. służą do tego opcje %H (godzina), %M (minuta) i %S (sekunda).

Przy badaniach dobowej lub sezonowej zmienności różnych zjawisk przyrodniczych chciałoby się policzyć, ile z nich było bliskie kolejnym godzinom, dniom, miesiącom itp., albo zdarzyło się w kolejnych godzinach, dniach, miesiącach itp. Można w tym celu wykorzystać możliwość “zaokrąglania” daty i czasu do godziny, doby, miesiąca itp. Służy do tego funkcja round() z opcją units. Częściej jednak (choć nie zawsze prawidłowo) używa się obcinanie mniejszych jednostek czasu. Służy do tego funkcja trunc().

> x=as.POSIXct(“1999-08-17 16:38:33”)
> round(x,units=”mins”)
[1] “1999-08-17 16:39:00 CEST”
> trunc(x,units=”mins”)
[1] “1999-08-17 16:38:00 CEST”
> round(x,units=”hours”)
[1] “1999-08-17 17:00:00 CEST”
> trunc(x,units=”hours”)
[1] “1999-08-17 16:00:00 CEST”
> round(x,units=”days”)
[1] “1999-08-18 CEST”
> trunc(x,units=”days”)
[1] “1999-08-17 CEST”
> round(x,units=”months”)
[1] “1999-09-01 CEST”
> trunc(x,units=”months”)
[1] “1999-08-01 CEST”
> round(x,units=”years”)
[1] “2000-01-01 CET”
> trunc(x,units=”years”)
[1] “1999-01-01 CET”

Uzyskane wyniki są zapisane w formacie POSIXt lub Date i dopiero funkcja format() pozwoli nam na wybranie konkretnych liczb oznaczających godzinę, miesiąc, rok itp.

 

Tags:
Spis treści