티스토리 뷰

반응형

날짜와 시간

 


오라클에서 SYSDATE 로 현재 시간을 출력했었죠?

R 에서도 비슷한 방법으로 현재 시간을 출력할 수 있답니다.

Sys.Date()     # 날짜를 보여주는 함수

Sys.time()     # 날짜와 시간을 보여주는 함수

date()          # 날짜와 시간을 영어로 보여주는 함수



R 에서 날짜는 문자열로 해석이 불가능합니다.

오라클에서도 문자를 날짜로 형변환하기 위해 to_date 함수를 사용했었는데, R 에서는 as.Date 를 사용합니다!


Oracle 
to_date('2018/12/01', 'YYYY/MM/DD') 


R

> as.Date('날짜', '날짜 형식')


as.Date() 함수는 문자형 데이터를 날짜 형식으로 변환해줍니다. 

두 번째 인자인 format 은 생략 가능하지만 의도하지 않은 날짜가 나올 수 있으므로,  입력 날짜 형식에 맞게 format 을 지정해주는 것이 중요합니다. format 형식에서 Y 는 대문자, m, d 는 소문자로 주의해주세요!

> as.Date('2018/12/01', '%Y%m%d')  # 날짜 포맷 주의

[1] NA

> as.Date('2018/12/01', '%Y-%m-%d')  # 날짜 포맷 주의

[1] NA

> as.Date('12/01/2018')   # 포맷 생략 시 의도하지 않은 날짜가 나오는 경우

[1] "0012-01-20"

as.Date('2018/12/01', format='%Y/%m/%d')

[1] "2018-12-01"

> as.Date('12/01/2018', '%m/%d/%Y')

[1] "2018-12-01"

> as.Date('11112011', format='%m%d%Y')

[1] "2011-11-11"



format 에는 여러가지 표현식이 있는데 이것을 확인하기 위해서는 help 함수를 통해 확인할 수 있습니다.

> help(as.Date)

> help(strptime)



날짜 데이터 생성

> seq('2018/12/01', '2018/12/31', 1)  에러발생(문자의 sequence 출력 불가) 

Error in seq.default("2018/12/01", "2018/12/31", 1) : 

  'from' must be a finite number

In addition: Warning message:

In seq.default("2018/12/01", "2018/12/31", 1) : NAs introduced by coercion

> seq(as.Date('2018/12/01', '%Y/%m/%d'), 

+     as.Date('2018/12/31', '%Y/%m/%d'), 

+     1)  연속적인 날짜의 출력, 1 은 day 기준

 [1] "2018-12-01" "2018-12-02" "2018-12-03" "2018-12-04" "2018-12-05" "2018-12-06" "2018-12-07"

 [8] "2018-12-08" "2018-12-09" "2018-12-10" "2018-12-11" "2018-12-12" "2018-12-13" "2018-12-14"

[15] "2018-12-15" "2018-12-16" "2018-12-17" "2018-12-18" "2018-12-19" "2018-12-20" "2018-12-21"

[22] "2018-12-22" "2018-12-23" "2018-12-24" "2018-12-25" "2018-12-26" "2018-12-27" "2018-12-28"

[29] "2018-12-29" "2018-12-30" "2018-12-31"

> seq(as.Date('2018/01/01', '%Y/%m/%d'), 

+     as.Date('2018/12/31', '%Y/%m/%d'), 

+     'month') # 연속적인 월의 출력, year 을 사용하면 연속적인 연의 출력

 [1] "2018-01-01" "2018-02-01" "2018-03-01" "2018-04-01" "2018-05-01" "2018-06-01" "2018-07-01"

 [8] "2018-08-01" "2018-09-01" "2018-10-01" "2018-11-01" "2018-12-01"



날짜 연산

R 도 오라클과 같이 날짜 연산이 가능하지만, 파이썬은 날짜 연산이 불가능하다는 것!

> date <- seq(as.Date('20181201', '%Y%m%d'),

+             as.Date('20181231', '%Y%m%d'), 1)

> date

 [1] "2018-12-01" "2018-12-02" "2018-12-03" "2018-12-04" "2018-12-05" "2018-12-06" "2018-12-07"

 [8] "2018-12-08" "2018-12-09" "2018-12-10" "2018-12-11" "2018-12-12" "2018-12-13" "2018-12-14"

[15] "2018-12-15" "2018-12-16" "2018-12-17" "2018-12-18" "2018-12-19" "2018-12-20" "2018-12-21"

[22] "2018-12-22" "2018-12-23" "2018-12-24" "2018-12-25" "2018-12-26" "2018-12-27" "2018-12-28"

[29] "2018-12-29" "2018-12-30" "2018-12-31"

> as.character(date, '%Y')  # date 날짜 표현식에서 각 년도만 출력

 [1] "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018"

[14] "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018" "2018"

[27] "2018" "2018" "2018" "2018" "2018"

> as.character(date, '%m')

 [1] "12" "12" "12" "12" "12" "12" "12" "12" "12" "12" "12" "12" "12" "12" "12" "12" "12" "12" "12"

[20] "12" "12" "12" "12" "12" "12" "12" "12" "12" "12" "12" "12"

> as.character(date, '%d')

 [1] "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19"

[20] "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" "31"

> as.character(date,'%a')

 [1] "토" "일" "월" "화" "수" "목" "금" "토" "일" "월" "화" "수" "목" "금" "토" "일" "월" "화" "수"

[20] "목" "금" "토" "일" "월" "화" "수" "목" "금" "토" "일" "월"





 날짜와 시간 패키지(lubridate)



lubridate 는 날짜 연산을 위해 많이 사용되는 패키지입니다.

> install.packages("lubridate")

> library(lubridate)

다음의 패키지를 부착합니다: ‘lubridate’

> date <- now()  # 현재 시간 리턴

> date

[1] "2018-12-24 21:52:04 KST"

> year(date)   # 년도만 추출

[1] 2018

> month(date, label=T)   # 영문 월 추출

[1] 12

Levels: 1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < 11 < 12

> month(date, label=F)   # 숫자 월 추출

[1] 12

> day(date)   # 일 추출

[1] 24

> wday(date, label=T)   # 영문 요일 추출

[1] 월

Levels: 일 < 월 < 화 < 수 < 목 < 금 < 토

> date

[1] "2018-12-24 22:16:44 KST"

> date+years(1)   # 1 년 추가

[1] "2019-12-24 22:16:44 KST"

> date+months(1)   # 1 달 추가

[1] "2019-01-24 22:16:44 KST"

> date+hours(1)   # 1시간 추가

[1] "2018-12-24 23:16:44 KST"

> date+minutes(1)   # 1 분 추가

[1] "2018-12-24 22:17:44 KST"

> date+seconds(1)   # 1 초 추가

[1] "2018-12-24 22:16:45 KST"



Q. 날짜 문제

# 문제1) 2019년 1월 날짜 데이터를 생성. 

> date <- seq(as.Date('2019/01/01', '%Y/%m/%d'),

+             as.Date('2019/01/31', '%Y/%m/%d'),

+             1)

> date

 [1] "2019-01-01" "2019-01-02" "2019-01-03" "2019-01-04" "2019-01-05" "2019-01-06" "2019-01-07"

 [8] "2019-01-08" "2019-01-09" "2019-01-10" "2019-01-11" "2019-01-12" "2019-01-13" "2019-01-14"

[15] "2019-01-15" "2019-01-16" "2019-01-17" "2019-01-18" "2019-01-19" "2019-01-20" "2019-01-21"

[22] "2019-01-22" "2019-01-23" "2019-01-24" "2019-01-25" "2019-01-26" "2019-01-27" "2019-01-28"

[29] "2019-01-29" "2019-01-30" "2019-01-31"


# 문제2) 5,6번째 데이터 추출

> date[5:6]   # 방법 1

[1] "2019-01-05" "2019-01-06"

> date[c(5,6)]   # 방법 2

[1] "2019-01-05" "2019-01-06"


# 문제3) 위의 데이터를 1년 후 데이터로 수정 

# 벡터의 일부 수정. 일부 데이터를 추출한 후 수정 

> date[c(5,6)] <- date[c(5,6)]+365   # 방법 1

> date

 [1] "2019-01-01" "2019-01-02" "2019-01-03" "2019-01-04" "2020-01-05" "2020-01-06" "2019-01-07"

 [8] "2019-01-08" "2019-01-09" "2019-01-10" "2019-01-11" "2019-01-12" "2019-01-13" "2019-01-14"

[15] "2019-01-15" "2019-01-16" "2019-01-17" "2019-01-18" "2019-01-19" "2019-01-20" "2019-01-21"

[22] "2019-01-22" "2019-01-23" "2019-01-24" "2019-01-25" "2019-01-26" "2019-01-27" "2019-01-28"

[29] "2019-01-29" "2019-01-30" "2019-01-31"

> library(lubridate)   # 방법 2

> date[c(5,6)] <- date[c(5,6)]+years(1)

> date

 [1] "2019-01-01" "2019-01-02" "2019-01-03" "2019-01-04" "2020-01-05" "2020-01-06" "2019-01-07"

 [8] "2019-01-08" "2019-01-09" "2019-01-10" "2019-01-11" "2019-01-12" "2019-01-13" "2019-01-14"

[15] "2019-01-15" "2019-01-16" "2019-01-17" "2019-01-18" "2019-01-19" "2019-01-20" "2019-01-21"

[22] "2019-01-22" "2019-01-23" "2019-01-24" "2019-01-25" "2019-01-26" "2019-01-27" "2019-01-28"

[29] "2019-01-29" "2019-01-30" "2019-01-31"






참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성


반응형

'R > Process' 카테고리의 다른 글

[R] 행렬(Matrix)  (0) 2018.12.26
[R] 리스트(list)  (0) 2018.12.26
[R] 진리값, 진리값의 연산자  (0) 2018.12.24
[R] 팩터 (factor)  (5) 2018.12.24
[R] 벡터(vector)  (0) 2018.12.24
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday