Kodas
t <- as.POSIXlt(Sys.time())
t[1] "2026-09-05 20:40:25 EEST"
Kodas
t$wday[1] 6
Kodas
t$mday[1] 5
Kodas
t$yday[1] 247
Įterpti lubridate paketą
Dirbant su datos ir laiko duomenimis, paprastai reikia atlikti tokius veiksmus:
iš datos arba laiko išskirti tam tikrą jo elementą;
prie datos ar laiko pridėti tam tikrą laiko intervalą;
apskaičiuoti skirtumą tarp dviejų laiko momentų;
suskirstyti laiko momentus į tam tikrus intervalus;
generuoti laiko momentų seką.
Jei laiko momentas užrašytas kaip POSIXlt klasės objektas, kai kurias datos ir laiko komponentes galima gauti be jokių papildomų funkcijų, kadangi tokiu būdu užrašytas laiko momentas yra įvairių laiko ir datos komponenčių sąrašas. Pvz., nustatysime, kelinta savaitės, mėnesio ir metų diena yra ši diena.
t <- as.POSIXlt(Sys.time())
t[1] "2026-09-05 20:40:25 EEST"
t$wday[1] 6
t$mday[1] 5
t$yday[1] 247
Savaitės dienos, mėnesio pavadinimo ir metų ketvirčio nustatymui bendru atveju gali būti naudojamos šios funkcijos: weekdays(), months(), quarters(). Visų funkcijų argumentai vienodi.
| Argumentas | Reikšmė |
|---|---|
x |
data arba laikas, |
abbreviate |
loginis, nurodo, pavadinimas turi būti sutrumpintas. |
Pavyzdžiui, žinomos kelių artimiausių pilnų Saulės užtemimų datos. Nustatysime, kurią savaitės dieną vyko Saulės užtemimai nurodytomis datomis.
[1] "Tuesday" "Monday" "Tuesday" "Monday" "Saturday"
Kadangi datos ir laiko kintamieji, nepriklausomai nuo jų formato, saugomi kaip skaičiai, keletas standartinių funkcijų turi metodus datos ir laiko objektams:
| Datoms | Laikui |
|---|---|
trunc.Date |
trunc.POSIXt |
round.Date |
round.POSIXt |
seq.Date |
seq.POSIXt |
cut.Date |
cut.POSIXt |
hist.Date |
hist.POSIXt |
axis.Date |
axis.POSIXt |
Tai reiškia, kad su datomis ir laiku galima elgtis kaip su įprastais skaičiais: juos apvalinti iki norimo tikslumo, generuoti laiko momentų sekas arba turimus laiko momentus grupuoti į intervalus.
Jeigu duotą laiko momentą reikia užrašyti dienų, valandų, minučių ar sekundžių tikslumu, naudojama funkcija trunc. Jeigu laiko momentą reikia suapvalinti iki artimiausio laiko momento dienų, valandų, minučių arba sekundžių tikslumu, tai naudojama funkcija round. Abiejų funkcijų parametrai vienodi:
| Argumentas | Reikšmė |
|---|---|
x |
laiko momentas |
units |
laiko apvalinimo vienetai, secs, mins, hours arba days
|
Pavyzdžiui, duotas laiko momentas sekundės tūkstantųjų tikslumu. Užrašysime jį dienų, valandų, minučių ir sekundžių tikslumu. Vienu atveju naudosime funkciją trunc(), kitu – funkciją round().
t <- as.POSIXct("2015-11-22 18:39:12.683", format = "%Y-%m-%d %H:%M:%OS")
t[1] "2015-11-22 18:39:12 EET"
format(t, format = "%H:%M:%OS3")[1] "18:39:12.683"
trunc(t, "day")[1] "2015-11-22 EET"
round(t, "day")[1] "2015-11-23 EET"
trunc(t, "hours")[1] "2015-11-22 18:00:00 EET"
round(t, "hours")[1] "2015-11-22 19:00:00 EET"
trunc(t, "mins")[1] "2015-11-22 18:39:00 EET"
round(t, "mins")[1] "2015-11-22 18:39:00 EET"
trunc(t, "secs")[1] "2015-11-22 18:39:12 EET"
round(t, "secs")[1] "2015-11-22 18:39:13 EET"
Datų ir laiko momentų sekos generavimui naudojama funkcija seq(), t. y. tapati funkcija, kuri skirta ir realiųjų skaičių sekų generavimui. Ši standartinė funkcija turi atskirus metodus Date ir POSIXt klasės objektams.
seq.Date()Parametrui from priskiriame Date klasės reikšmę. Parametras to neprivalomas, jeigu per parametrus length.out arba along.with nurodome bendrą sekos elementų skaičių. Parametrui by reikšmę galima priskirti net keliais skirtingais būdais, kadangi sekos kitimo žingsnis, intervalas tarp dviejų sekos elementų gali būti:
skaičius, kuris nurodo dienų skaičių;
difftime klasės objektas;
žodinis laiko intervalas: "day", "week", "month", "quarter", "year";
kartotinis laiko intervalas: "7 days", "2 months", "-1 years" ir pan.
Tarkime, kad sekos pradžia ir pabaiga yra pirma ir paskutinė 2025 metų dienos. Sudarysime keletą skirtingų sekų su įvairaus dydžio tarpais tarp gretimų datų.
Sugeneruosime seką, kurią sudaro visos sausio mėnesio dienos.
seq(pr, by = "day", length.out = 31) [1] "2025-01-01" "2025-01-02" "2025-01-03" "2025-01-04" "2025-01-05"
[6] "2025-01-06" "2025-01-07" "2025-01-08" "2025-01-09" "2025-01-10"
[11] "2025-01-11" "2025-01-12" "2025-01-13" "2025-01-14" "2025-01-15"
[16] "2025-01-16" "2025-01-17" "2025-01-18" "2025-01-19" "2025-01-20"
[21] "2025-01-21" "2025-01-22" "2025-01-23" "2025-01-24" "2025-01-25"
[26] "2025-01-26" "2025-01-27" "2025-01-28" "2025-01-29" "2025-01-30"
[31] "2025-01-31"
Sudarome seką, kurioje į praeitį atidedame penkias datas kas du metus.
seq(pr, by = "-2 years", length.out = 5)[1] "2025-01-01" "2023-01-01" "2021-01-01" "2019-01-01" "2017-01-01"
Vienerių metų intervalą suskirstome 4 savaičių ilgio laiko intervalais.
seq(pr, pb, by = "4 weeks") [1] "2025-01-01" "2025-01-29" "2025-02-26" "2025-03-26" "2025-04-23"
[6] "2025-05-21" "2025-06-18" "2025-07-16" "2025-08-13" "2025-09-10"
[11] "2025-10-08" "2025-11-05" "2025-12-03" "2025-12-31"
seq.POSIXt()Jeigu funkcija seq() naudojama laiko sekoms generuoti, tada parametrams from, to nurodome POSIXt laiko momentą, o parametrui by galima nurodyti šias reikšmes:
skaičių, kuris reiškia sekundžių skaičių;
difftime klasės objektą;
intervalą: “sec”, “min”, “hour”, “day”, “week”, “month”, “quarter”, “year”;
kartotinį laiko intervalą: “15 secs”, “2 hour”, “-1 years” ir pan.
Pavyzdžiui, vienos valandos ilgio intervalą reikia padalinti į mažesnius laiko intervalus po 90 sekundžių. Pradinis momentas 08:00:00, galutinis – 09:00:00.
pr <- as.POSIXlt("2015-01-01 08:00:00")
pb <- as.POSIXlt("2015-01-01 09:00:00")
seq(pr, pb, by = "90 secs") [1] "2015-01-01 08:00:00 EET" "2015-01-01 08:01:30 EET"
[3] "2015-01-01 08:03:00 EET" "2015-01-01 08:04:30 EET"
[5] "2015-01-01 08:06:00 EET" "2015-01-01 08:07:30 EET"
[7] "2015-01-01 08:09:00 EET" "2015-01-01 08:10:30 EET"
[9] "2015-01-01 08:12:00 EET" "2015-01-01 08:13:30 EET"
[11] "2015-01-01 08:15:00 EET" "2015-01-01 08:16:30 EET"
[13] "2015-01-01 08:18:00 EET" "2015-01-01 08:19:30 EET"
[15] "2015-01-01 08:21:00 EET" "2015-01-01 08:22:30 EET"
[17] "2015-01-01 08:24:00 EET" "2015-01-01 08:25:30 EET"
[19] "2015-01-01 08:27:00 EET" "2015-01-01 08:28:30 EET"
[21] "2015-01-01 08:30:00 EET" "2015-01-01 08:31:30 EET"
[23] "2015-01-01 08:33:00 EET" "2015-01-01 08:34:30 EET"
[25] "2015-01-01 08:36:00 EET" "2015-01-01 08:37:30 EET"
[27] "2015-01-01 08:39:00 EET" "2015-01-01 08:40:30 EET"
[29] "2015-01-01 08:42:00 EET" "2015-01-01 08:43:30 EET"
[31] "2015-01-01 08:45:00 EET" "2015-01-01 08:46:30 EET"
[33] "2015-01-01 08:48:00 EET" "2015-01-01 08:49:30 EET"
[35] "2015-01-01 08:51:00 EET" "2015-01-01 08:52:30 EET"
[37] "2015-01-01 08:54:00 EET" "2015-01-01 08:55:30 EET"
[39] "2015-01-01 08:57:00 EET" "2015-01-01 08:58:30 EET"
[41] "2015-01-01 09:00:00 EET"
Tarkime, kad reikalinga seka iš 10 laiko momentų kas 45 minutes.
seq(pr, by = "45 mins", length.out = 10) [1] "2015-01-01 08:00:00 EET" "2015-01-01 08:45:00 EET"
[3] "2015-01-01 09:30:00 EET" "2015-01-01 10:15:00 EET"
[5] "2015-01-01 11:00:00 EET" "2015-01-01 11:45:00 EET"
[7] "2015-01-01 12:30:00 EET" "2015-01-01 13:15:00 EET"
[9] "2015-01-01 14:00:00 EET" "2015-01-01 14:45:00 EET"
cut.Date() ir cut.POSIXt()
Datų ir laiko momentų grupavimui naudojama funkcija cut() - ji turi metodus Date ir POSIXt klasės objektams. Pagrindiniai šios funkcijos parametrai yra tokie:
| Argumentas | Reikšmė |
|---|---|
x |
datų arba laiko momentų vektorius |
breaks |
padalijimo taškų vektorius arba norimas intervalų skaičius |
labels |
NULL, intervalų pavadinimų vektorius |
right |
FALSE, nurodo ar intervalo galas uždaras iš dešinės |
Grupuojant laiko intervalus parametrui breaks galima nurodyti tokias reikšmes: “sec”, “min”, “hour”, “day”, “DSTday”, “week”, “month”, “quarter” arba “year”.
Pavyzdžiui, vienos paros bėgyje atidėsime 100 atsitiktinių laiko momentų, tada juos suskirstysime į intervalus po 6 valandas bei apskaičiuosime laiko momentų dažnius kiekviename tokiame intervale.
# generuojami atsitiktiniai laiko momentai
t <- ISOdatetime(2015, 11, 23, 0, 0, 0) + 24*3600*runif(100)
t [1] "2015-11-23 02:14:59 EET" "2015-11-23 08:24:49 EET"
[3] "2015-11-23 18:06:41 EET" "2015-11-23 03:43:59 EET"
[5] "2015-11-23 02:00:02 EET" "2015-11-23 05:56:13 EET"
[7] "2015-11-23 01:45:59 EET" "2015-11-23 15:44:16 EET"
[9] "2015-11-23 10:25:23 EET" "2015-11-23 12:45:19 EET"
[11] "2015-11-23 21:49:16 EET" "2015-11-23 04:31:15 EET"
[13] "2015-11-23 06:48:40 EET" "2015-11-23 22:32:07 EET"
[15] "2015-11-23 01:30:50 EET" "2015-11-23 06:52:32 EET"
[17] "2015-11-23 13:21:19 EET" "2015-11-23 03:51:31 EET"
[19] "2015-11-23 19:17:36 EET" "2015-11-23 06:18:16 EET"
[21] "2015-11-23 03:18:32 EET" "2015-11-23 15:46:11 EET"
[23] "2015-11-23 22:51:42 EET" "2015-11-23 21:57:20 EET"
[25] "2015-11-23 15:21:38 EET" "2015-11-23 22:20:56 EET"
[27] "2015-11-23 21:20:08 EET" "2015-11-23 20:00:54 EET"
[29] "2015-11-23 11:56:40 EET" "2015-11-23 23:36:54 EET"
[31] "2015-11-23 00:56:35 EET" "2015-11-23 17:28:44 EET"
[33] "2015-11-23 00:40:20 EET" "2015-11-23 04:18:17 EET"
[35] "2015-11-23 15:52:29 EET" "2015-11-23 15:42:36 EET"
[37] "2015-11-23 16:08:14 EET" "2015-11-23 03:52:21 EET"
[39] "2015-11-23 23:58:57 EET" "2015-11-23 20:11:10 EET"
[41] "2015-11-23 22:38:49 EET" "2015-11-23 13:05:36 EET"
[43] "2015-11-23 22:12:10 EET" "2015-11-23 23:01:29 EET"
[45] "2015-11-23 08:22:45 EET" "2015-11-23 19:00:53 EET"
[47] "2015-11-23 00:26:10 EET" "2015-11-23 17:44:09 EET"
[49] "2015-11-23 05:39:04 EET" "2015-11-23 11:23:22 EET"
[51] "2015-11-23 16:17:57 EET" "2015-11-23 06:49:25 EET"
[53] "2015-11-23 13:28:53 EET" "2015-11-23 12:57:02 EET"
[55] "2015-11-23 10:05:58 EET" "2015-11-23 22:09:02 EET"
[57] "2015-11-23 05:06:32 EET" "2015-11-23 23:58:53 EET"
[59] "2015-11-23 07:26:23 EET" "2015-11-23 10:49:56 EET"
[61] "2015-11-23 11:09:08 EET" "2015-11-23 15:39:24 EET"
[63] "2015-11-23 10:29:04 EET" "2015-11-23 02:18:27 EET"
[65] "2015-11-23 12:05:56 EET" "2015-11-23 05:19:49 EET"
[67] "2015-11-23 19:02:07 EET" "2015-11-23 20:59:01 EET"
[69] "2015-11-23 02:57:44 EET" "2015-11-23 01:58:35 EET"
[71] "2015-11-23 08:08:19 EET" "2015-11-23 22:30:47 EET"
[73] "2015-11-23 15:21:06 EET" "2015-11-23 02:48:44 EET"
[75] "2015-11-23 07:40:35 EET" "2015-11-23 12:06:27 EET"
[77] "2015-11-23 12:15:10 EET" "2015-11-23 11:19:45 EET"
[79] "2015-11-23 05:55:34 EET" "2015-11-23 22:29:43 EET"
[81] "2015-11-23 14:56:58 EET" "2015-11-23 05:04:13 EET"
[83] "2015-11-23 18:00:20 EET" "2015-11-23 22:42:54 EET"
[85] "2015-11-23 05:14:49 EET" "2015-11-23 01:51:46 EET"
[87] "2015-11-23 16:00:43 EET" "2015-11-23 10:44:25 EET"
[89] "2015-11-23 04:51:07 EET" "2015-11-23 00:48:40 EET"
[91] "2015-11-23 22:04:59 EET" "2015-11-23 20:37:32 EET"
[93] "2015-11-23 06:08:09 EET" "2015-11-23 04:26:59 EET"
[95] "2015-11-23 23:27:29 EET" "2015-11-23 12:03:26 EET"
[97] "2015-11-23 14:35:57 EET" "2015-11-23 02:39:03 EET"
[99] "2015-11-23 18:09:07 EET" "2015-11-23 02:44:28 EET"
[1] 2015-11-23 2015-11-23 06:00:00 2015-11-23 18:00:00
[4] 2015-11-23 2015-11-23 2015-11-23
[7] 2015-11-23 2015-11-23 12:00:00 2015-11-23 06:00:00
[10] 2015-11-23 12:00:00 2015-11-23 18:00:00 2015-11-23
[13] 2015-11-23 06:00:00 2015-11-23 18:00:00 2015-11-23
[16] 2015-11-23 06:00:00 2015-11-23 12:00:00 2015-11-23
[19] 2015-11-23 18:00:00 2015-11-23 06:00:00 2015-11-23
[22] 2015-11-23 12:00:00 2015-11-23 18:00:00 2015-11-23 18:00:00
[25] 2015-11-23 12:00:00 2015-11-23 18:00:00 2015-11-23 18:00:00
[28] 2015-11-23 18:00:00 2015-11-23 06:00:00 2015-11-23 18:00:00
[31] 2015-11-23 2015-11-23 12:00:00 2015-11-23
[34] 2015-11-23 2015-11-23 12:00:00 2015-11-23 12:00:00
[37] 2015-11-23 12:00:00 2015-11-23 2015-11-23 18:00:00
[40] 2015-11-23 18:00:00 2015-11-23 18:00:00 2015-11-23 12:00:00
[43] 2015-11-23 18:00:00 2015-11-23 18:00:00 2015-11-23 06:00:00
[46] 2015-11-23 18:00:00 2015-11-23 2015-11-23 12:00:00
[49] 2015-11-23 2015-11-23 06:00:00 2015-11-23 12:00:00
[52] 2015-11-23 06:00:00 2015-11-23 12:00:00 2015-11-23 12:00:00
[55] 2015-11-23 06:00:00 2015-11-23 18:00:00 2015-11-23
[58] 2015-11-23 18:00:00 2015-11-23 06:00:00 2015-11-23 06:00:00
[61] 2015-11-23 06:00:00 2015-11-23 12:00:00 2015-11-23 06:00:00
[64] 2015-11-23 2015-11-23 12:00:00 2015-11-23
[67] 2015-11-23 18:00:00 2015-11-23 18:00:00 2015-11-23
[70] 2015-11-23 2015-11-23 06:00:00 2015-11-23 18:00:00
[73] 2015-11-23 12:00:00 2015-11-23 2015-11-23 06:00:00
[76] 2015-11-23 12:00:00 2015-11-23 12:00:00 2015-11-23 06:00:00
[79] 2015-11-23 2015-11-23 18:00:00 2015-11-23 12:00:00
[82] 2015-11-23 2015-11-23 18:00:00 2015-11-23 18:00:00
[85] 2015-11-23 2015-11-23 2015-11-23 12:00:00
[88] 2015-11-23 06:00:00 2015-11-23 2015-11-23
[91] 2015-11-23 18:00:00 2015-11-23 18:00:00 2015-11-23 06:00:00
[94] 2015-11-23 2015-11-23 18:00:00 2015-11-23 12:00:00
[97] 2015-11-23 12:00:00 2015-11-23 2015-11-23 18:00:00
[100] 2015-11-23
4 Levels: 2015-11-23 2015-11-23 06:00:00 ... 2015-11-23 18:00:00
# gautų intervalų dažnių lentelė
table(intervalai)intervalai
2015-11-23 2015-11-23 06:00:00 2015-11-23 12:00:00 2015-11-23 18:00:00
30 19 23 28
Pavyzdžiui, visą parą suskirstysime į du nevienodo ilgio intervalus: nuo 00:00 iki 05:59 ir nuo 06:00 iki 23:59. Tokiu atveju parametrui breaks nurodome tris laiko momentus POSIX formatu.
[1] naktis diena diena naktis naktis naktis naktis diena diena diena
[11] diena naktis diena diena naktis diena diena naktis diena diena
[21] naktis diena diena diena diena diena diena diena diena diena
[31] naktis diena naktis naktis diena diena diena naktis diena diena
[41] diena diena diena diena diena diena naktis diena naktis diena
[51] diena diena diena diena diena diena naktis diena diena diena
[61] diena diena diena naktis diena naktis diena diena naktis naktis
[71] diena diena diena naktis diena diena diena diena naktis diena
[81] diena naktis diena diena naktis naktis diena diena naktis naktis
[91] diena diena diena naktis diena diena diena naktis diena naktis
Levels: naktis diena
table(intervalai)intervalai
naktis diena
30 70
Analogiškai į intervalus suskirstomos ir datos. Pvz., dviejų mėnesių intervale (pradedant nuo 2025-11-23) sugeneruosime 20 atsitiktinių datų ir suskirstysime jas į dviejų savaičių ilgio intervalus.
[1] "2026-01-19" "2025-12-01" "2025-12-18" "2026-01-05" "2025-12-18"
[6] "2026-01-07" "2025-12-22" "2025-11-28" "2025-12-20" "2025-12-06"
[11] "2025-12-19" "2025-12-30" "2025-12-19" "2026-01-07" "2026-01-17"
[16] "2025-11-24" "2025-12-07" "2026-01-21" "2025-11-29" "2025-11-27"
intervalai <- cut(d, breaks = "2 weeks")
intervalai [1] 2026-01-19 2025-11-24 2025-12-08 2026-01-05 2025-12-08 2026-01-05
[7] 2025-12-22 2025-11-24 2025-12-08 2025-11-24 2025-12-08 2025-12-22
[13] 2025-12-08 2026-01-05 2026-01-05 2025-11-24 2025-11-24 2026-01-19
[19] 2025-11-24 2025-11-24
Levels: 2025-11-24 2025-12-08 2025-12-22 2026-01-05 2026-01-19
table(intervalai)intervalai
2025-11-24 2025-12-08 2025-12-22 2026-01-05 2026-01-19
7 5 2 4 2
Turint datą ar laiko momentą, prie jo galima pridėti tam tikrą laiko intervalą. Prie datos pridedamas skaičius nurodo dienų skaičių, prie POSIX laiko - nurodo sekundžių skaičių. Pavyzdžiui, prie šios dienos datos pridėsime šimtą dienų ir gausime naują datą.
# Sys.Date() yra Date klasės objektas
Sys.Date() + 100[1] "2026-12-14"
Pavyzdžiui, prie laiko momento pridėsime 120 sekundžių ir tokiu būdu gausime 2 minutėmis vėlesnį laiko momentą.
# POSIXt klasės objektai
ISOdatetime(2015, 11, 25, 21, 14, 00) + 120[1] "2015-11-25 21:16:00 EET"
as.POSIXlt("2015-11-25 21:14:00") + 120[1] "2015-11-25 21:16:00 EET"
Turint dvi datas arba du laiko momentus, galima apskaičiuoti skirtumą tarp jų. Pvz., nustatysime koks laiko skirtumas tarp atominės bombos sprogimų Japonijos miestuose Hiroshima ir Nagasaki.
Hiroshima <- as.POSIXlt("1945-08-06 08:15:00", tz = "Japan")
Nagasakis <- as.POSIXlt("1945-08-09 11:02:00", tz = "Japan")
Nagasakis - HiroshimaTime difference of 3.115972 days
Pvz., apskaičiuosime, kiek laiko praėjo nuo Hiroshima atominės bombos sprogimo.
Sys.time() - HiroshimaTime difference of 29615.77 days
Gautas laiko skirtumas yra difftime klasės objektas. Skirtumą galima pridėti arba atimti iš datos arba laiko momento.
d <- Nagasakis - Hiroshima
dTime difference of 3.115972 days
Hiroshima + d[1] "1945-08-09 11:02:00 JST"
Hiroshima + d == Nagasakis[1] TRUE
difftime() ir diff()
Jeigu reikia apskaičiuoti skirtumą tarp dviejų datų arba dviejų laiko momentų, galima naudoti funkciją difftime(). Tada galima nurodyti, kokiais vienetais turi būti išreikštas gautas laiko skirtumas.
| Argumentas | Reikšmė |
|---|---|
time1 |
pradinis laiko momentas |
time2 |
galutinis laiko momentas |
tz |
laiko zona |
units |
laiko vienetai: “auto”, “secs”, “mins”, “hours”, “days”, “weeks” |
Jeigu parametrui units priskiriama reikšmė “auto”, tai laiko skirtumas rodomas didžiausiais laiko vienetais. Galima pastebėti, kad tarp laiko vienetų mėnesių nėra. Taip yra todėl, kad skirtingus mėnesius sudaro skirtingas dienų skaičius.
difftime(Nagasakis, Hiroshima, units = "days")Time difference of 3.115972 days
difftime(Nagasakis, Hiroshima, units = "hours")Time difference of 74.78333 hours
Jeigu turime datų arba laiko momentų vektorių, skirtumus tarp gretimų reikšmių galime nustatyti naudojant standartinę funkciją diff(). Pavyzdžiui, taip gausime dienomis išreikštus laiko skirtumus tarp didžiausių LDK mūšių datų.
[1] "1236-09-22" "1260-07-13" "1410-07-15" "1514-09-08" "1605-09-27"
diff(t)Time differences in days
[1] 8695 54787 38040 33257
as.difftime()Jei duotas laiko skirtumų vektorius, tada į difftime formatą jis paverčiamas naudojant funkciją as.difftime().
| Argumentas | Reikšmė |
|---|---|
tim |
laiko skirtumų vektorius, character arba numeric
|
format |
formatas, kuriuo užrašytas laiko skirtumas |
units |
laiko matavimo vienetai, standartiškai “auto” |
Pavyzdžiui, žinomas tam tikrų įvykių laiko trukmės vektorius. Sudarysime laiko skirtumų vektorių.
s <- c("01:54:02", "02:11:32", "02:26:45", "02:44:49", "02:57:09", "03:11:08")
d <- as.difftime(s, format = "%H:%M:%S", units = "hours")
dTime differences in hours
[1] 1.900556 2.192222 2.445833 2.746944 2.952500 3.185556
difftime klasės laiko skirtumus galima apvalinti, sumuoti ir vidurkinti arba skaičiuoti įvairias kitas statistines charakteristikas.
min(d)Time difference of 1.900556 hours
max(d)Time difference of 3.185556 hours
range(d)Time differences in hours
[1] 1.900556 3.185556
quantile(d)Time differences in hours
0% 25% 50% 75% 100%
1.900556 2.255625 2.596389 2.901111 3.185556
mean(d)Time difference of 2.570602 hours
sum(d)Time difference of 15.42361 hours
Laiko skirtumai gali būti duoti kaip skaitinių reikšmių vektorius. Pavyzdžiui, tie patys laiko skirtumai galėjo būti išreikšti sekundėmis.
s <- c(6842, 7892, 8805, 9889, 10629, 11468)
d <- as.difftime(s, units = "secs")
dTime differences in secs
[1] 6842 7892 8805 9889 10629 11468
Kartais reikia žinoti, kiek laiko užtrunka tam tikri skaičiavimai. Pavyzdžiui, gali dominti, kiek laiko užtrunka viena ciklo iteracija arba reikia nustatyti, kuri iš dviejų alternatyvių komandų įvykdoma greičiau.
Norint sužinoti skaičiavimų trukmę, reikia užfiksuoti laiką, kada prasideda ir kada baigiasi skaičiavimai. Tam galima naudoti standartinę funkciją Sys.time(). Pavyzdžiui, apskaičiuosime, kiek laiko užtrunka 100 vektorių su normaliosiomis atsitiktinėmis reikšmėmis generavimas ir vidurkinimas.
Time difference of 0.008314133 secs
Tam pačiam tikslui galima panaudoti ir funkciją proc.time(), kuri parodo, kiek laiko veikia R.
user system elapsed
0.00 0.00 0.02
Jeigu išraiška užrašoma kompaktiškai, tada jos vykdymo trukmę galima nustatyti įdėjus ją į funkciją system.time(). Pvz., nustatysime, kuri iš dviejų funkcijų greičiau apskaičiuoja matricos stulpelių vidurkius.
n <- 1000
m <- matrix(rnorm(n*n), ncol = n, nrow = n)
system.time(apply(m, 2, mean)) user system elapsed
0.02 0.00 0.01
system.time(colMeans(m)) user system elapsed
0 0 0