Chapter 4 Date

날짜, 시간에 관련된 데이터는 R의 기본함수 및 lubridate 패키지를 이용해 쉽게 다룰 수 있습니다.

4.1 현재 날짜 및 시간

Sys.timezone()
## [1] "Asia/Seoul"
Sys.Date()
## [1] "2021-09-12"
Sys.time()
## [1] "2021-09-12 18:18:20 KST"

기본 함수를 통해 현재 타임존 및 날짜, 시간을 확인할 수 있습니다.

4.2 문자열을 날짜로 변경하기

x = c('2015-07-01', '2015-08-01', '2015-09-01')
x_date = as.Date(x)
str(x_date)
##  Date[1:3], format: "2015-07-01" "2015-08-01" "2015-09-01"

as.Date() 함수를 이용할 경우, 문자열 형태가 Date로 변경됩니다.

y = c('07/01/2015', '08/01/2015', '09/01/2015')
as.Date(y, format = '%m/%d/%Y')
## [1] "2015-07-01" "2015-08-01" "2015-09-01"

YYYY-MM-DD 형태가 아닌 다른 형태로 입력된 경우, format을 직접 입력하여 Date 형태로 변경할 수 있습니다.

library(lubridate)
ymd(x)
## [1] "2015-07-01" "2015-08-01" "2015-09-01"
mdy(y)
## [1] "2015-07-01" "2015-08-01" "2015-09-01"

lubridate 패키지를 이용할 경우 YYYY-MM-DD 형태는 ymd(), MM-DD-YYYY 형태는 mdy() 함수를 사용해 손쉽게 Date 형태로 변경할 수 있습니다. 이 외에도 lubridate에는 Date 형태로 변경하기 위한 다양한 함수가 존재합니다.

순서 함수
year, month, day ymd()
year, day, month ydm()
month, day, year mdy()
day, month, year dmy()
hour, minute hm()
hour, minute, second hms()
year, month, day, hour, minute, secod ymd_hms()

4.3 날짜 관련 정보 추출

lubridate 패키지에는 날짜 관련 정보를 추출할 수 있는 다양한 함수가 존재합니다.

정보 함수
Year year()
Month month()
Week week()
Day of year yday()
Day of month mday()
Day of week wday()
Hour hour()
Minute minute()
Second second()
Time zone tz()
x = c('2015-07-01', '2015-08-01', '2015-09-01')
year(x)
## [1] 2015 2015 2015
month(x)
## [1] 7 8 9
week(x)
## [1] 26 31 35

year(), month(), week() 함수를 통해 년도, 월, 주 정보를 확인할 수 있습니다.

z = '2015-09-15'
yday(z)
## [1] 258
mday(z)
## [1] 15
wday(z)
## [1] 3

yday(), mday(), wday() 함수는 각각 해당 년도에서 몇번째 일인지, 해당 월에서 몇번째 일인지, 해당 주에서 몇번째 일인지를 계산합니다.

x = ymd('2015-07-01', '2015-08-01', '2015-09-01') 
x + years(1) - days(c(2, 9, 21))
## [1] "2016-06-29" "2016-07-23" "2016-08-11"

날짜에서 년도와 월, 일자를 더하거나 빼는 계산 역시 가능합니다.

4.4 날짜 순서 생성하기

seq() 함수를 이용할 경우 날짜 벡터를 생성할 수도 있습니다.

seq(ymd('2010-01-01'), ymd('2015-01-01'), by ='years')
## [1] "2010-01-01" "2011-01-01" "2012-01-01" "2013-01-01" "2014-01-01"
## [6] "2015-01-01"

2010년 1월 1일부터 2015년 1월 1일까지 1년을 기준으로 벡터가 생성됩니다.

seq(ymd('2010-09-01'), ymd('2010-09-30'), by ='2 days')
##  [1] "2010-09-01" "2010-09-03" "2010-09-05" "2010-09-07" "2010-09-09"
##  [6] "2010-09-11" "2010-09-13" "2010-09-15" "2010-09-17" "2010-09-19"
## [11] "2010-09-21" "2010-09-23" "2010-09-25" "2010-09-27" "2010-09-29"

지정 일수만큼 벡터를 생성할 수도 있습니다.