8.2 lubridate 패키지

tidyverse 패키지는 문자열 날짜 데이터를 더 쉽게 Date 형식으로 변환할 수 있도록 도와주고 또 그러한 날짜형 데이터를 처리하기 위한 함수를 제공하는 lubridate 라는 재미있는 이름을 가진 패키지를 제공하고 있다.

lubridate 패키지가 제공하는 Date 변환 함수는 아주 다양한 날짜 형식을 받아들이면서도, 그러한 형식에 대한 사양을 기억할 필요를 없애준다. 단지 y, m, 그리고 d 등의 문자를 취하고, 날짜 컬럼에 데이터를 저장할 때 이러한 문자 각각에 대하여 ‘년,’ ‘월,’ 그리고 ‘일’ 등의 순서를 메겨 준다. 그러한 순서가 해당 컬럼을 Date 로 변환하는 함수의 이름을 생성한다(예를 들어, ymd() 함수, mdy() 함수, dmy() 함수 등).

lubridate 패키지는 tidyverse 패키지를 설치할 때 같이 설치는 되지만, library(tidyverse)를 불러올 때 자동으로 불러와 지지 않는다. 따라서, 이제 이 패키지를 불러온다.

library(lubridate)
## 
## Attaching package: 'lubridate'
## The following object is masked from 'package:hms':
## 
##     hms
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union

8.2.1 lubridate 패키지의 활용

lubridate 함수의 유연성을 보여주기 위해 먼저 다양한 날짜 형식을 가지고 있는 데이터 세트를 불어오기로 한다.

d <- read_csv("data8/dates.csv")
## 
## -- Column specification --------------------------------------------------------
## cols(
##   fmt1 = col_character(),
##   fmt2 = col_character(),
##   fmt3 = col_date(format = ""),
##   fmt4 = col_double(),
##   decision_time = col_character()
## )
d
## # A tibble: 3 x 5
##   fmt1     fmt2             fmt3           fmt4 decision_time             
##   <chr>    <chr>            <date>        <dbl> <chr>                     
## 1 01/15/89 December 8, 2015 2015-02-27 20090101 Approved 10-10-15 07:15:55
## 2 02/13/92 January 22, 2012 2016-11-15 20080819 Denied 09-27-11 14:57:23  
## 3 03/15/84 March 3, 2010    2017-12-25 20071011 Approved 04-24-15 02:03:03
  • 현재, 앞의 4개 컬럼들이 chr, chr, date, 그리고 dbl 형식으로 저장이 되어 있다.
  • 세 번째 컬럼은 read_csv() 함수로 날짜임을 알려 주는 특정한 형식으로 인해 , 사실상 read_csv() 함수에 의해 Date 형식으로 인식이 되어 있다.
  • 첫 두 개의 컬럼은 월-일-년의 형식을 사용하고 있지만, 세 번째와 네 번째 컬럼은 년-월-일 형식을 사용하고 있다.
  • 다섯 번째 컬럼의 decision_time은 ‘날짜-시간’ 값을 포함하고 있다.

따라서, mdy() 함수와 ymd() 함수를 사용해 본다. 그 유연성이 놀라울 따름이다.

# no format specifications needed
# just ordering y,m, and d
dates <- data.frame(f1=mdy(d$fmt1), f2=mdy(d$fmt2),
                    f3=ymd(d$fmt3), f4=ymd(d$fmt4))
dates
##           f1         f2         f3         f4
## 1 1989-01-15 2015-08-20 2015-02-27 2009-01-01
## 2 1992-02-13 2012-02-02 2016-11-15 2008-08-19
## 3 1984-03-15 2010-03-20 2017-12-25 2007-10-11
str(dates)
## 'data.frame':    3 obs. of  4 variables:
##  $ f1: Date, format: "1989-01-15" "1992-02-13" ...
##  $ f2: Date, format: "2015-08-20" "2012-02-02" ...
##  $ f3: Date, format: "2015-02-27" "2016-11-15" ...
##  $ f4: Date, format: "2009-01-01" "2008-08-19" ...
  • 이제 네 개의 컬럼 모두가 같은 형식의 Date 클래스로 변환되었음을 알 수 있다.