Gå till index

Lilla Forskarskolan: Forskningsmetoder och Analys med R

0% färdig
0/0 Steps
  1. Analys och forskning med R och Posit (Rstudio)
  2. Grunderna i R och Rstudio
    7 Ämnen
  3. Importera, exportera, spara och ladda data
    5 Ämnen
  4. Strängar och regular expressions (regex)
    1 Ämne
  5. Bearbetning av data med dplyr
    12 Ämnen
  6. Visualisera och presentera
    14 Ämnen
  7. Explorerande och deskriptiva analyser
    6 Ämnen
  8. Prediktionsmodeller
    12 Ämnen
  9. Klassisk regressionsanalys
    8 Ämnen
  10. Machine learning (ML) och Artificiell Intelligens (AI)
    9 Ämnen
  11. Skapa prediktionsmodeller med Tidymodels
    6 Ämnen
  12. Hypotestester och epidemiologiska mått
    5 Ämnen
Avsnitt Progress
0% färdig

Datum och tider

7.1 Introduktion

Att arbeta med datum och tider kan vara omständligt. Detta förklaras av att datum och tid är tämligen komplicerade ämnen. Att hantera år, månader, sommartid, vintertid, tidszoner och geografiska skillnader i kalendrar kan vara ganska komplicerat. R har inbyggda funktioner för att hantera datum och tid men dessa funktioner är ofta svåra att använda. Därför skapades lubridate som innehåller en rad funktioner som gör hantering av datum och tid betydligt enklare.

Vi kommer aktivera två paket nu:

R
library(tidyverse)
library(lubridate)

I lubridate kan du definiera tre datum- eller tidsvariabler:

  • date: date är ett datum med år, månad och dag. I en tibble kallas detta <date>.
  • time: time är ett klockslag. I en tibble kallas detta <time>. För att hantera klockslag används paketet hms.
  • datetime: en datetime innehåller både datum och time. I en tibble kallas detta <dttm>.

Använd inte datetime om du inte måste. Om du använder datetime kan du eventuellt behöva beakta tidszoner för att beräkningar skall bli korrekta (se nedan).

För att få veta vilket som är dagens datum skrives följande kommando:

R
today()
Resultat
[1] "2022-11-09"

För att få veta vilken datumtid som föreligger skrives följande kommando:

R
now()
Resultat
[1] "2022-11-09 21:11:39 CET"

Lubridate lagrar datum som antalet dagar sedan ett referensdatum som är 1970-01-01 00:00:00 GMT. Vi kan beräkna vilket datum som förelåg 10000 dagar sedan detta referensdatum genom att använda funktionen as_date():

R
as_date(10000) 
Resultat
[1] "1997-05-19"

Med funktionen as_datetime() kan du beräkna datumtiden i sekunder från referensdatumet:

R
as_datetime(3600)
Resultat
[1] "1970-01-01 01:00:00 UTC"

I de allra flesta fall får vi datum och datumtider i form av textsträngar. För att kunna använda lubridate behöver vi beakta ordningen på tidselementen (år, månad, dag, timme, minut, sekunder). Därefter kan vi välja en lubridate funktion som kan läsa in datumet eller datumtiden korrekt. I tabellen nedan ser du några exempel på olika sätt att skriva datumet 31 december år 2020, och motsvarande lubridate funktion som klarar att läsa in datumet:

DatumformatOrdning på tidselementFunktion i lubridate
2020-12-31YYYY-MM-DDymd()
2020/12/31YYYY/MM/DDymd()
20201231YYYYMMDDymd()
20-12-31YY-MM-DDymd()
201231YYMMDDymd()
Datumformat och motsvarande lubridate funktioner.

Låt oss testa det genom att skapa en data frame med tre individer, inklusive deras namn, födelsedatum, undersökningsdatum och dödsdatum. Alla datum kommer att skrivas på olika sätt för att testa funktionen ymd():

R
# Skapa vektorer
name <- c("David", "Mohammed", "Christina")
birth_date <- ymd("1990-01-01", "1999-01-04", "2002-05-05")
examination_date <- ymd("1990.01.01", "1999.01.04", "2002.05.05")
death_date <- ymd("2005/02/02", "2009/11/14", "2018/01/01")

# Slå ihop vektorer till en data frame
my_data <- data.frame(name, birth_date, examination_date, death_date)

# Se data frame
my_data
Resultat
       name birth_date examination_date death_date
1     David 1990-01-01       1990-01-01 2005-02-02
2  Mohammed 1999-01-04       1999-01-04 2009-11-14
3 Christina 2002-05-05       2002-05-05 2018-01-01

Låt oss ändra ordningen på år, månad och dag i våra datum. Detta är oproblematiskt så länge vi byter funktion i lubridate:

R
# Dag, månad, år
dmy("31-12-2022")
Resultat
[1] "2022-12-31"
R
# Månad, dag, år
mdy("12-31-2022")
Resultat
[1] "2022-12-31"
R
# År, månad, dag
ymd("20221231")
Resultat
[1] "2022-12-31"
R
# Blandade strängar
mdy("December 31st 2022")
Resultat
[1] "2022-12-31"
R
mdy("December, 31st, 2022")
Resultat
[1] "2022-12-31"
R
dmy("31-Dec-2022")
Resultat
[1] "2022-12-31"
R
dmy("31*Dec*2022")
Resultat
[1] "2022-12-31"

Lubridate förstod varenda datumsträng!

I nästa exempel lagrar vi ett datum som inkluderar ett klockslag (datumtid). För att läsa detta korrekt lägger vi till bokstäverna h (timme), m (minuter) och s (sekunder) enligt följande:

R
ymd_hms("2011-06-04 12:00:00")
Resultat
[1] "2011-06-04 12:00:00 UTC"

Här finns också möjlighet att specificera den exakta kombinationen av tidselementen:

R
mdy_hm("12/31/2022 10:35")
Resultat
[1] "2022-12-31 10:35:00 UTC"

R tilldelade datumet tidszonen UTC. R kan hantera cirka 600 tidszoner, inklusive zonernas sommartider, vintertider och historiska kalendervariationer. Du kan få en lista över alla tidszoner genom att skriva följande:

R
OlsonNames()
Resultat
  [1] "Africa/Abidjan"                   "Africa/Accra"                    
  [3] "Africa/Addis_Ababa"               "Africa/Algiers"                  
  [5] "Africa/Asmara"                    "Africa/Asmera"                   
  [7] "Africa/Bamako"                    "Africa/Bangui"                   
  [9] "Africa/Banjul"                    "Africa/Bissau"                   
 [11] "Africa/Blantyre"                  "Africa/Brazzaville"              
 [13] "Africa/Bujumbura"                 "Africa/Cairo"                    
 [15] "Africa/Casablanca"                "Africa/Ceuta"                    
 [17] "Africa/Conakry"                   "Africa/Dakar"                    
 [19] "Africa/Dar_es_Salaam"             "Africa/Djibouti"                 
 [21] "Africa/Douala"                    "Africa/El_Aaiun"                 
 [23] "Africa/Freetown"                  "Africa/Gaborone"                 
 [25] "Africa/Harare"                    "Africa/Johannesburg"             
 [27] "Africa/Juba"                      "Africa/Kampala"                  
 [29] "Africa/Khartoum"                  "Africa/Kigali"                   
 [31] "Africa/Kinshasa"                  "Africa/Lagos"                    
 [33] "Africa/Libreville"                "Africa/Lome"                     
 [35] "Africa/Luanda"                    "Africa/Lubumbashi"               
 [37] "Africa/Lusaka"                    "Africa/Malabo"                   
 [39] "Africa/Maputo"                    "Africa/Maseru"                   
 [41] "Africa/Mbabane"                   "Africa/Mogadishu"                
 [43] "Africa/Monrovia"                  "Africa/Nairobi"                  
 [45] "Africa/Ndjamena"                  "Africa/Niamey"                   
 [47] "Africa/Nouakchott"                "Africa/Ouagadougou"              
 [49] "Africa/Porto-Novo"                "Africa/Sao_Tome"                 
 [51] "Africa/Timbuktu"                  "Africa/Tripoli"                  
 [53] "Africa/Tunis"                     "Africa/Windhoek"                 
 [55] "America/Adak"                     "America/Anchorage"               
 [57] "America/Anguilla"                 "America/Antigua"                 
 [59] "America/Araguaina"                "America/Argentina/Buenos_Aires"  
 [61] "America/Argentina/Catamarca"      "America/Argentina/ComodRivadavia"
 [63] "America/Argentina/Cordoba"        "America/Argentina/Jujuy"         
 [65] "America/Argentina/La_Rioja"       "America/Argentina/Mendoza"       
 [67] "America/Argentina/Rio_Gallegos"   "America/Argentina/Salta"         
 [69] "America/Argentina/San_Juan"       "America/Argentina/San_Luis"      
 [71] "America/Argentina/Tucuman"        "America/Argentina/Ushuaia"       
 [73] "America/Aruba"                    "America/Asuncion"                
 [75] "America/Atikokan"                 "America/Atka"                    
 [77] "America/Bahia"                    "America/Bahia_Banderas"          
 [79] "America/Barbados"                 "America/Belem"                   
 [81] "America/Belize"                   "America/Blanc-Sablon"            
 [83] "America/Boa_Vista"                "America/Bogota"                  
 [85] "America/Boise"                    "America/Buenos_Aires"            
 [87] "America/Cambridge_Bay"            "America/Campo_Grande"            
 [89] "America/Cancun"                   "America/Caracas"                 
 [91] "America/Catamarca"                "America/Cayenne"                 
 [93] "America/Cayman"                   "America/Chicago"                 
 [95] "America/Chihuahua"                "America/Coral_Harbour"           
 [97] "America/Cordoba"                  "America/Costa_Rica"              
 [99] "America/Creston"                  "America/Cuiaba"                  
[101] "America/Curacao"                  "America/Danmarkshavn"            
[103] "America/Dawson"                   "America/Dawson_Creek"            
[105] "America/Denver"                   "America/Detroit"                 
[107] "America/Dominica"                 "America/Edmonton"                
[109] "America/Eirunepe"                 "America/El_Salvador"             
[111] "America/Ensenada"                 "America/Fort_Nelson"             
[113] "America/Fort_Wayne"               "America/Fortaleza"               
[115] "America/Glace_Bay"                "America/Godthab"                 
[117] "America/Goose_Bay"                "America/Grand_Turk"              
[119] "America/Grenada"                  "America/Guadeloupe"              
[121] "America/Guatemala"                "America/Guayaquil"               
[123] "America/Guyana"                   "America/Halifax"                 
[125] "America/Havana"                   "America/Hermosillo"              
[127] "America/Indiana/Indianapolis"     "America/Indiana/Knox"            
[129] "America/Indiana/Marengo"          "America/Indiana/Petersburg"      
[131] "America/Indiana/Tell_City"        "America/Indiana/Vevay"           
[133] "America/Indiana/Vincennes"        "America/Indiana/Winamac"         
[135] "America/Indianapolis"             "America/Inuvik"                  
[137] "America/Iqaluit"                  "America/Jamaica"                 
[139] "America/Jujuy"                    "America/Juneau"                  
[141] "America/Kentucky/Louisville"      "America/Kentucky/Monticello"     
[143] "America/Knox_IN"                  "America/Kralendijk"              
[145] "America/La_Paz"                   "America/Lima"                    
[147] "America/Los_Angeles"              "America/Louisville"              
[149] "America/Lower_Princes"            "America/Maceio"                  
[151] "America/Managua"                  "America/Manaus"                  
[153] "America/Marigot"                  "America/Martinique"              
[155] "America/Matamoros"                "America/Mazatlan"                
[157] "America/Mendoza"                  "America/Menominee"               
[159] "America/Merida"                   "America/Metlakatla"              
[161] "America/Mexico_City"              "America/Miquelon"                
[163] "America/Moncton"                  "America/Monterrey"               
[165] "America/Montevideo"               "America/Montreal"                
[167] "America/Montserrat"               "America/Nassau"                  
[169] "America/New_York"                 "America/Nipigon"                 
[171] "America/Nome"                     "America/Noronha"                 
[173] "America/North_Dakota/Beulah"      "America/North_Dakota/Center"     
[175] "America/North_Dakota/New_Salem"   "America/Nuuk"                    
[177] "America/Ojinaga"                  "America/Panama"                  
[179] "America/Pangnirtung"              "America/Paramaribo"              
[181] "America/Phoenix"                  "America/Port_of_Spain"           
[183] "America/Port-au-Prince"           "America/Porto_Acre"              
[185] "America/Porto_Velho"              "America/Puerto_Rico"             
[187] "America/Punta_Arenas"             "America/Rainy_River"             
[189] "America/Rankin_Inlet"             "America/Recife"                  
[191] "America/Regina"                   "America/Resolute"                
[193] "America/Rio_Branco"               "America/Rosario"                 
[195] "America/Santa_Isabel"             "America/Santarem"                
[197] "America/Santiago"                 "America/Santo_Domingo"           
[199] "America/Sao_Paulo"                "America/Scoresbysund"            
[201] "America/Shiprock"                 "America/Sitka"                   
[203] "America/St_Barthelemy"            "America/St_Johns"                
[205] "America/St_Kitts"                 "America/St_Lucia"                
[207] "America/St_Thomas"                "America/St_Vincent"              
[209] "America/Swift_Current"            "America/Tegucigalpa"             
[211] "America/Thule"                    "America/Thunder_Bay"             
[213] "America/Tijuana"                  "America/Toronto"                 
[215] "America/Tortola"                  "America/Vancouver"               
[217] "America/Virgin"                   "America/Whitehorse"              
[219] "America/Winnipeg"                 "America/Yakutat"                 
[221] "America/Yellowknife"              "Antarctica/Casey"                
[223] "Antarctica/Davis"                 "Antarctica/DumontDUrville"       
[225] "Antarctica/Macquarie"             "Antarctica/Mawson"               
[227] "Antarctica/McMurdo"               "Antarctica/Palmer"               
[229] "Antarctica/Rothera"               "Antarctica/South_Pole"           
[231] "Antarctica/Syowa"                 "Antarctica/Troll"                
[233] "Antarctica/Vostok"                "Arctic/Longyearbyen"             
[235] "Asia/Aden"                        "Asia/Almaty"                     
[237] "Asia/Amman"                       "Asia/Anadyr"                     
[239] "Asia/Aqtau"                       "Asia/Aqtobe"                     
[241] "Asia/Ashgabat"                    "Asia/Ashkhabad"                  
[243] "Asia/Atyrau"                      "Asia/Baghdad"                    
[245] "Asia/Bahrain"                     "Asia/Baku"                       
[247] "Asia/Bangkok"                     "Asia/Barnaul"                    
[249] "Asia/Beirut"                      "Asia/Bishkek"                    
[251] "Asia/Brunei"                      "Asia/Calcutta"                   
[253] "Asia/Chita"                       "Asia/Choibalsan"                 
[255] "Asia/Chongqing"                   "Asia/Chungking"                  
[257] "Asia/Colombo"                     "Asia/Dacca"                      
[259] "Asia/Damascus"                    "Asia/Dhaka"                      
[261] "Asia/Dili"                        "Asia/Dubai"                      
[263] "Asia/Dushanbe"                    "Asia/Famagusta"                  
[265] "Asia/Gaza"                        "Asia/Harbin"                     
[267] "Asia/Hebron"                      "Asia/Ho_Chi_Minh"                
[269] "Asia/Hong_Kong"                   "Asia/Hovd"                       
[271] "Asia/Irkutsk"                     "Asia/Istanbul"                   
[273] "Asia/Jakarta"                     "Asia/Jayapura"                   
[275] "Asia/Jerusalem"                   "Asia/Kabul"                      
[277] "Asia/Kamchatka"                   "Asia/Karachi"                    
[279] "Asia/Kashgar"                     "Asia/Kathmandu"                  
[281] "Asia/Katmandu"                    "Asia/Khandyga"                   
[283] "Asia/Kolkata"                     "Asia/Krasnoyarsk"                
[285] "Asia/Kuala_Lumpur"                "Asia/Kuching"                    
[287] "Asia/Kuwait"                      "Asia/Macao"                      
[289] "Asia/Macau"                       "Asia/Magadan"                    
[291] "Asia/Makassar"                    "Asia/Manila"                     
[293] "Asia/Muscat"                      "Asia/Nicosia"                    
[295] "Asia/Novokuznetsk"                "Asia/Novosibirsk"                
[297] "Asia/Omsk"                        "Asia/Oral"                       
[299] "Asia/Phnom_Penh"                  "Asia/Pontianak"                  
[301] "Asia/Pyongyang"                   "Asia/Qatar"                      
[303] "Asia/Qostanay"                    "Asia/Qyzylorda"                  
[305] "Asia/Rangoon"                     "Asia/Riyadh"                     
[307] "Asia/Saigon"                      "Asia/Sakhalin"                   
[309] "Asia/Samarkand"                   "Asia/Seoul"                      
[311] "Asia/Shanghai"                    "Asia/Singapore"                  
[313] "Asia/Srednekolymsk"               "Asia/Taipei"                     
[315] "Asia/Tashkent"                    "Asia/Tbilisi"                    
[317] "Asia/Tehran"                      "Asia/Tel_Aviv"                   
[319] "Asia/Thimbu"                      "Asia/Thimphu"                    
[321] "Asia/Tokyo"                       "Asia/Tomsk"                      
[323] "Asia/Ujung_Pandang"               "Asia/Ulaanbaatar"                
[325] "Asia/Ulan_Bator"                  "Asia/Urumqi"                     
[327] "Asia/Ust-Nera"                    "Asia/Vientiane"                  
[329] "Asia/Vladivostok"                 "Asia/Yakutsk"                    
[331] "Asia/Yangon"                      "Asia/Yekaterinburg"              
[333] "Asia/Yerevan"                     "Atlantic/Azores"                 
[335] "Atlantic/Bermuda"                 "Atlantic/Canary"                 
[337] "Atlantic/Cape_Verde"              "Atlantic/Faeroe"                 
[339] "Atlantic/Faroe"                   "Atlantic/Jan_Mayen"              
[341] "Atlantic/Madeira"                 "Atlantic/Reykjavik"              
[343] "Atlantic/South_Georgia"           "Atlantic/St_Helena"              
[345] "Atlantic/Stanley"                 "Australia/ACT"                   
[347] "Australia/Adelaide"               "Australia/Brisbane"              
[349] "Australia/Broken_Hill"            "Australia/Canberra"              
[351] "Australia/Currie"                 "Australia/Darwin"                
[353] "Australia/Eucla"                  "Australia/Hobart"                
[355] "Australia/LHI"                    "Australia/Lindeman"              
[357] "Australia/Lord_Howe"              "Australia/Melbourne"             
[359] "Australia/North"                  "Australia/NSW"                   
[361] "Australia/Perth"                  "Australia/Queensland"            
[363] "Australia/South"                  "Australia/Sydney"                
[365] "Australia/Tasmania"               "Australia/Victoria"              
[367] "Australia/West"                   "Australia/Yancowinna"            
[369] "Brazil/Acre"                      "Brazil/DeNoronha"                
[371] "Brazil/East"                      "Brazil/West"                     
[373] "Canada/Atlantic"                  "Canada/Central"                  
[375] "Canada/Eastern"                   "Canada/Mountain"                 
[377] "Canada/Newfoundland"              "Canada/Pacific"                  
[379] "Canada/Saskatchewan"              "Canada/Yukon"                    
[381] "CET"                              "Chile/Continental"               
[383] "Chile/EasterIsland"               "CST6CDT"                         
[385] "Cuba"                             "EET"                             
[387] "Egypt"                            "Eire"                            
[389] "EST"                              "EST5EDT"                         
[391] "Etc/GMT"                          "Etc/GMT-0"                       
[393] "Etc/GMT-1"                        "Etc/GMT-10"                      
[395] "Etc/GMT-11"                       "Etc/GMT-12"                      
[397] "Etc/GMT-13"                       "Etc/GMT-14"                      
[399] "Etc/GMT-2"                        "Etc/GMT-3"                       
[401] "Etc/GMT-4"                        "Etc/GMT-5"                       
[403] "Etc/GMT-6"                        "Etc/GMT-7"                       
[405] "Etc/GMT-8"                        "Etc/GMT-9"                       
[407] "Etc/GMT+0"                        "Etc/GMT+1"                       
[409] "Etc/GMT+10"                       "Etc/GMT+11"                      
[411] "Etc/GMT+12"                       "Etc/GMT+2"                       
[413] "Etc/GMT+3"                        "Etc/GMT+4"                       
[415] "Etc/GMT+5"                        "Etc/GMT+6"                       
[417] "Etc/GMT+7"                        "Etc/GMT+8"                       
[419] "Etc/GMT+9"                        "Etc/GMT0"                        
[421] "Etc/Greenwich"                    "Etc/UCT"                         
[423] "Etc/Universal"                    "Etc/UTC"                         
[425] "Etc/Zulu"                         "Europe/Amsterdam"                
[427] "Europe/Andorra"                   "Europe/Astrakhan"                
[429] "Europe/Athens"                    "Europe/Belfast"                  
[431] "Europe/Belgrade"                  "Europe/Berlin"                   
[433] "Europe/Bratislava"                "Europe/Brussels"                 
[435] "Europe/Bucharest"                 "Europe/Budapest"                 
[437] "Europe/Busingen"                  "Europe/Chisinau"                 
[439] "Europe/Copenhagen"                "Europe/Dublin"                   
[441] "Europe/Gibraltar"                 "Europe/Guernsey"                 
[443] "Europe/Helsinki"                  "Europe/Isle_of_Man"              
[445] "Europe/Istanbul"                  "Europe/Jersey"                   
[447] "Europe/Kaliningrad"               "Europe/Kiev"                     
[449] "Europe/Kirov"                     "Europe/Kyiv"                     
[451] "Europe/Lisbon"                    "Europe/Ljubljana"                
[453] "Europe/London"                    "Europe/Luxembourg"               
[455] "Europe/Madrid"                    "Europe/Malta"                    
[457] "Europe/Mariehamn"                 "Europe/Minsk"                    
[459] "Europe/Monaco"                    "Europe/Moscow"                   
[461] "Europe/Nicosia"                   "Europe/Oslo"                     
[463] "Europe/Paris"                     "Europe/Podgorica"                
[465] "Europe/Prague"                    "Europe/Riga"                     
[467] "Europe/Rome"                      "Europe/Samara"                   
[469] "Europe/San_Marino"                "Europe/Sarajevo"                 
[471] "Europe/Saratov"                   "Europe/Simferopol"               
[473] "Europe/Skopje"                    "Europe/Sofia"                    
[475] "Europe/Stockholm"                 "Europe/Tallinn"                  
[477] "Europe/Tirane"                    "Europe/Tiraspol"                 
[479] "Europe/Ulyanovsk"                 "Europe/Uzhgorod"                 
[481] "Europe/Vaduz"                     "Europe/Vatican"                  
[483] "Europe/Vienna"                    "Europe/Vilnius"                  
[485] "Europe/Volgograd"                 "Europe/Warsaw"                   
[487] "Europe/Zagreb"                    "Europe/Zaporozhye"               
[489] "Europe/Zurich"                    "Factory"                         
[491] "GB"                               "GB-Eire"                         
[493] "GMT"                              "GMT-0"                           
[495] "GMT+0"                            "GMT0"                            
[497] "Greenwich"                        "Hongkong"                        
[499] "HST"                              "Iceland"                         
[501] "Indian/Antananarivo"              "Indian/Chagos"                   
[503] "Indian/Christmas"                 "Indian/Cocos"                    
[505] "Indian/Comoro"                    "Indian/Kerguelen"                
[507] "Indian/Mahe"                      "Indian/Maldives"                 
[509] "Indian/Mauritius"                 "Indian/Mayotte"                  
[511] "Indian/Reunion"                   "Iran"                            
[513] "Israel"                           "Jamaica"                         
[515] "Japan"                            "Kwajalein"                       
[517] "Libya"                            "MET"                             
[519] "Mexico/BajaNorte"                 "Mexico/BajaSur"                  
[521] "Mexico/General"                   "MST"                             
[523] "MST7MDT"                          "Navajo"                          
[525] "NZ"                               "NZ-CHAT"                         
[527] "Pacific/Apia"                     "Pacific/Auckland"                
[529] "Pacific/Bougainville"             "Pacific/Chatham"                 
[531] "Pacific/Chuuk"                    "Pacific/Easter"                  
[533] "Pacific/Efate"                    "Pacific/Enderbury"               
[535] "Pacific/Fakaofo"                  "Pacific/Fiji"                    
[537] "Pacific/Funafuti"                 "Pacific/Galapagos"               
[539] "Pacific/Gambier"                  "Pacific/Guadalcanal"             
[541] "Pacific/Guam"                     "Pacific/Honolulu"                
[543] "Pacific/Johnston"                 "Pacific/Kanton"                  
[545] "Pacific/Kiritimati"               "Pacific/Kosrae"                  
[547] "Pacific/Kwajalein"                "Pacific/Majuro"                  
[549] "Pacific/Marquesas"                "Pacific/Midway"                  
[551] "Pacific/Nauru"                    "Pacific/Niue"                    
[553] "Pacific/Norfolk"                  "Pacific/Noumea"                  
[555] "Pacific/Pago_Pago"                "Pacific/Palau"                   
[557] "Pacific/Pitcairn"                 "Pacific/Pohnpei"                 
[559] "Pacific/Ponape"                   "Pacific/Port_Moresby"            
[561] "Pacific/Rarotonga"                "Pacific/Saipan"                  
[563] "Pacific/Samoa"                    "Pacific/Tahiti"                  
[565] "Pacific/Tarawa"                   "Pacific/Tongatapu"               
[567] "Pacific/Truk"                     "Pacific/Wake"                    
[569] "Pacific/Wallis"                   "Pacific/Yap"                     
[571] "Poland"                           "Portugal"                        
[573] "PRC"                              "PST8PDT"                         
[575] "ROC"                              "ROK"                             
[577] "Singapore"                        "Turkey"                          
[579] "UCT"                              "Universal"                       
[581] "US/Alaska"                        "US/Aleutian"                     
[583] "US/Arizona"                       "US/Central"                      
[585] "US/East-Indiana"                  "US/Eastern"                      
[587] "US/Hawaii"                        "US/Indiana-Starke"               
[589] "US/Michigan"                      "US/Mountain"                     
[591] "US/Pacific"                       "US/Samoa"                        
[593] "UTC"                              "W-SU"                            
[595] "WET"                              "Zulu"                            
attr(,"Version")
[1] "2022f"

Låt oss ange tidszonen till GMT (Greenwich Mean Time):

R
ymd_hms("2011-06-04 12:00:00", tz="GMT")
Resultat
[1] "2011-06-04 12:00:00 GMT"
R
ymd_hms("2017-01-31 20:11:59")
Resultat
[1] "2017-01-31 20:11:59 UTC"
R
mdy_hm("01/31/2017 08:01")
Resultat
[1] "2017-01-31 08:01:00 UTC"

7.1.1 Från enskilda komponenter

Om tidselementen finns i flera kolumner kan funktionerna make_date() och make_datetime() användas för att skapa datum respektive datumtider. Låt oss aktivera paketet nycflights13 för att använda inbygda data på flygplansresor.

R
year <- c(2021, 2022)
month <- c(1, 12)
day <- c(1, 31)

mina_datum <- data.frame(year, month, day)

mina_datum
Resultat
  year month day
1 2021     1   1
2 2022    12  31

Nu skapar vi ett datum med kolumnerna year, month och day. Den nya datumkolumnen kallas my_date:

R
mina_datum$my_date <- make_date(mina_datum$year, mina_datum$month, mina_datum$day)

# Se resultatet
mina_datum
Resultat
  year month day    my_date
1 2021     1   1 2021-01-01
2 2022    12  31 2022-12-31

Nu gör vi om det med en datumtid. För detta behövs kolumner med hour, minute och seconds. Den nya kolumnen kommer kallas my_datetime:

R
year <- c(2021, 2022)
month <- c(1, 12)
day <- c(1, 31)
hour <- c(10, 12)
minute <- c(19, 24)
seconds <- c(11, 45)

mina_datum <- data.frame(year, month, day, hour, minute, seconds)

mina_datum$my_datetime <- make_datetime(mina_datum$year,
                                        mina_datum$month,
                                        mina_datum$day,
                                        mina_datum$hour,
                                        mina_datum$minute,
                                        mina_datum$seconds)

# Se resultatet
mina_datum
Resultat
  year month day hour minute seconds         my_datetime
1 2021     1   1   10     19      11 2021-01-01 10:19:11
2 2022    12  31   12     24      45 2022-12-31 12:24:45

7.2 Extrahera komponenter

Du kan extrahera komponenter i datum och datumtider med extraktionsfunktionerna i lubridate. De har namn som är intuitiva och exempel följer här nedan:

Först definierar vi en datumtid som är klockan 12:00:00 den 31 december 2022:

R
datetime <- ymd_hms("2022-11-30 12:00:00")
datetime
Resultat
[1] "2022-11-30 12:00:00 UTC"

Nu extraherar vi en komponent i taget:

R
year(datetime) # årtal
Resultat
[1] 2022
R
month(datetime, label = TRUE) # månad med namn
Resultat
[1] Nov
12 Levels: Jan < Feb < Mar < Apr < May < Jun < Jul < Aug < Sep < ... < Dec
R
month(datetime) # månad med siffra
Resultat
[1] 11
R
mday(datetime) # månaden
Resultat
[1] 30
R
week(datetime) # veckonummer
Resultat
[1] 48
R
hour(datetime) # timman
Resultat
[1] 12
R
minute(datetime) # minuten
Resultat
[1] 0
R
yday(datetime) # dagen på året
Resultat
[1] 334
R
wday(datetime, label = TRUE) # veckodagen med namn
Resultat
[1] Wed
Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat
R
wday(datetime) # veckodagen med siffra
Resultat
[1] 4

7.2.1 Avrudning

Datum kan avrundas med funktionerna floor_date()round_date(), och ceiling_date().

7.2.2 Modifiera tidselementen

Du kan modifiera tidselementen i datum och datumtider:

R
# Skapa en datumtid:
datetime <- ymd_hms("2022-12-30 00:00:00")
datetime
Resultat
[1] "2022-12-30 UTC"
R
# Ändra året till 2025
year(datetime) <- 2025
datetime
Resultat
[1] "2025-12-30 UTC"
R
# Ändra månaden till januari
month(datetime) <- 01
datetime
Resultat
[1] "2025-01-30 UTC"
R
# Lägg till en timme på timman
hour(datetime) <- hour(datetime) + 1
datetime
Resultat
[1] "2025-01-30 01:00:00 UTC"

Med funktionen update() kan du modifiera flera datumkomponenter samtidigt:

R
datetime <- update(datetime, year = 2030, month = 2, mday = 2, hour = 2)
datetime
Resultat
[1] "2030-02-02 02:00:00 UTC"

Om värdena är för stora kommer de att rulla över:

7.3 Durationer, perioder och intervaller

Datum kan användas för att beräkna durationer, perioder och intervaller.

  • duration: en duration är ett antal sekunder eller dagar.
  • period: en period har veckor eller månader.
  • intervall: ett intervall har en startpunkt och en slutpunkt.

7.3.1 Durationer

När differensen mellan två datum beräknas skapas ett objekt av typen difftime. Låt oss beräkna differensen mellan 1991-08-22 och idag:

R
age <- today() - ymd("1991-08-22")
age
Resultat
Time difference of 11402 days

Differensen kan också beräknas med funktionen difftime():

R
difftime(today(), ymd("1991-08-22"))
Resultat
Time difference of 11402 days

Funktionen as.duration() är mer förutsägbar än difftime eftersom as.duration() beräknar alla durationer i sekunder:

R
as.duration(age)
Resultat
[1] "985132800s (~31.22 years)"

Med durations-funktionerna kan du beräkna antal sekunder som förlöpt. Exempel följer.

Hur många sekunder finns det på 10 sekunder?

Resultat
dseconds(10)
Resultat
[1] "10s"

Antal sekunder på 60 minuter:

R
dminutes(60)
Resultat
[1] "3600s (~1 hours)"

Antal sekunder på en timme:

R
dhours(1)
Resultat
[1] "3600s (~1 hours)"

Antal sekunder på en dag:

R
ddays(1)
Resultat
[1] "86400s (~1 days)"

Antal sekunder på en vecka:

R
dweeks(1)
Resultat
[1] "604800s (~1 weeks)"

Antal sekunder på ett år:

R
dyears(1)
Resultat
[1] "31557600s (~1 years)"

Att göra beräkningar på sekunder har vissa fördelar. Först och främst blir beräkningen mer exakt. Om man exempelvis använder år som tidsskala så kan man inte använda 365 dagar för att definiera ett år eftersom den genomsnittliga längden på ett år är 365.25 dagar. Vi kan inte heller använda månader som tidsskala eftersom månaderna är olika långa. En sekund är dock alltid en sekund (såvida du inte närmar dig ljusets hastighet eller ett eventhoristonen).

Du kan addera och subtrahera durationer:

R
dseconds(1) + dhours(1)
Resultat
[1] "3601s (~1 hours)"

Du kan lägga till och subtrahera durationer till och från dagar:

R
# Imorgon
today() + ddays(1)
Resultat
[1] "2022-11-10"
R
# Förra året
today() - dyears(1)
Resultat
[1] "2021-11-08 18:00:00 UTC"

7.3.2 Perioder

En period är ett en tidslängd mellan två tidpunkter. En period på 1 timme, 1 dag, 1 månad definieras som följer:

Resultat
hours(1)
Resultat
[1] "1H 0M 0S"
R
days(1)
Resultat
[1] "1d 0H 0M 0S"
R
months(1)
Resultat
[1] "1m 0d 0H 0M 0S"

Du kan addera, subtrahera och multiplicera perioder:

R
hours(1) + days(1)
Resultat
[1] "1d 1H 0M 0S"
R
hours(1) * 2
Resultat
[1] "2H 0M 0S"

Du kan addera en period till ett befintligt datum eller datumtid:

R
ymd("2022-12-01") + ddays(1)
Resultat
[1] "2022-12-02"
R
ymd("2022-12-01") + days(1)
Resultat
[1] "2022-12-02"

7.3.3 Intervals

År 2015 fanns 365 dagar. År 2016 fanns 366 dagar. Att dividera antal dagar år 215 och 2016 på 365 ger därför inte samma resultat. Om du ändå försöker göra det kommer lubridate ge dig en uppskattning. För att veta mer exakt hur många dagar som förlöpt under en specifik period är intervaller bättre. Ett intervall har ett start- och slutdatum.

Intervaller skapas med syntax start %--% slut:

R
# Antal dagar år 2015
my_interval_1 <- ymd("2015-01-01") %--% ymd("2016-01-01")
my_interval_1 / days(1)
Resultat
[1] 365
R
# Antal dagar år 2016
my_interval_2 <- ymd("2016-01-01") %--% ymd("2017-01-01")
my_interval_2 / days(1)
Resultat
[1] 366

7.4 Din tidszon

Din nuvarande tidszon kan kontrolleras som följer:

R
Sys.timezone()
Resultat
[1] "Europe/Stockholm"