티스토리 뷰
날짜와 시간
오라클에서 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 |