R/Exploratory data analysis

R for Data Science:: datetime

Abokadoh 2023. 6. 16. 01:44

날짜 혹은 시간을 다루는데 유용한 도구들이 있다. 

install.packages('lubridate')

library(lubridate)

lubridate 패키지를 열고 

 

today()
now()

이 책에서는 date/time을 만들 수 있는 방법이 3가지 있다고 소개한다.

 

첫 번째는 string으로

두 번째는 individual date-time으로

세 번째는 기존의 date/time object 

 

우리는 보통 첫 번째, 두 번째를 사용하게 될 것이다.

 

ymd("2017-01-31")

mdy("January 31st, 2017")

dmy("31-Jan-2017")

ymd(20170131)

ymd_hms("2017-01-31 20:11:59")

mdy_hm("01/31/2017 08:01")

 

 

이번엔 두 번째 방법인 individual components가 뭔지 살펴보자.

 

library(nycflights13)
library(tidyverse)
flights %>%
	select(year, month, day, hour, minute)

 

이렇게 뽑은 개별 날짜 데이터들을 이용해 날짜 데이터를 만드는 함수 make_datetime()함수가 있다.

- make_datetime()

flights %>%
	select(year, month, day, hour, minute) %>%
    mutate(departure = make_datetime(year, month, day, hour, minute))

 

- exercise

1. What happens if you parse a string that contains invalid dates?

ymd(c("2020-10-10", "bananas"))
## [1] "2010-10-10" NA

2. What does the tzone argument to today() do? Why is it important?

today(tzone ="UTC") #지역의 날짜를 의미하기 때문에 인자값에 따라 값이 바뀔 수 있다.

3. Use the appropriate lubridate function to pars each of the following dates.

d1 <- "January 1, 2010"
d2 <- "2015-Mar-07"
d3 <- "06-Jun-2017"
d4 <- c("August 19 (2015)", "July 1 (2015)")
d5 <- "12/30/14" # Dec 30, 2014
mdy(d1)
ymd(d2)
dmy(d3)
mdy(d4) 
mdy(d5)

date data에서 특정 함수를 사용하여 연 월, 일 등 개별 데이터만을 가져올 수 있다.

datetime <- ymd_hms("2016-07-08 12:34:56")

year(datetime)
## [1] 2016
month(datetime)
## [1] 7
mday(datetime)
## [1] 8
yday(datetime)
## [1] 190
wday(datetime)
## [1] 6

 

month()나 wday()의 경우 label=TRUE 인자를 사용해서 월 또는 요일 약식 이름을 함께 반환받을 수 있을다.

month(datetime, label = TRUE)
## [1] Jul
## 12 Levels: Jan < Feb < Mar < Apr < May < Jun < Jul < Aug < Sep < ... < Dec
wday(datetime, label = TRUE, abbr = FALSE)
## [1] Friday
## 7 Levels: Sunday < Monday < Tuesday < Wednesday < Thursday < ... < Saturday
datetime <- ymd_hms("2016-07-08 12:34:56")

 

이런식으로 구성요소를 변경할 수 있따.

datetime <- ymd_hms("2016-07-08 12:34:56")
year(datetime) <- 2020
datetime
month(datetime) <- 01
datetime
hour(datetime) <- hour(datetime) + 1
datetime

또는 update()함수를 사용할 수도 있다.

update(datetime, year = 2020, month = 2, mday = 2, hour = 2)
## [1] "2020-02-02 02:34:56 UTC"
ymd("2015-02-01") %>% 
  update(mday = 30)
## [1] "2015-03-02"

2015년 2월에는 30일이 없기 때문에 3월 2로 보여준다.

ymd("2015-02-01") %>% 
  update(hour = 400)
## [1] "2015-02-17 16:00:00 UTC"

시간도 마찬가지다 24시간이 넘어가면 날이 넘어가는걸로 계산해준다.