2020. 3. 26. 22:46 IT/R (데이터전처리대전 따라하기)
R 날짜, 시간 계산
timestamp와 date형으로 변환
R에서 날짜 및 시간 관련 자료형은 timestamp와 datetime이 있음
R은 timestamp 타입에 POSIXct형과 POSIXlt 형이 있고, 날짜형에 Date형이 있음
POSIXct형은 1970-01-01 부터의 초를 가짐
- 일시형 끼리 비교하거나 시간 차를 계산 할 때 유용
POSIXlt형은 년,월,일,시,분,초 각각을 리스트 형태로 가짐
- 년, 월 등 특정 일시 요소를 다룰 때 유용
library(tidyverse)
library(lubridate)
# data read
reserve <- read_csv('data/reserve.csv')
# POSIXct형은 1970-01-01 부터의 초를 가진다며??
# POSIXct형 변환
as.POSIXct(reserve$reserve_datetime, format='%Y-%m-%d %H:%M:%S')
as.POSIXct(paste(reserve$checkin_date,reserve$checkin_time), format='%Y-%m-%d %H:%M:%S')
#POSIXct형 변환(첫번째 파라미터가 character vector여야 함)
parse_date_time2(reserve$reserve_datetime, orders = '%Y-%m-%d %H:%M:%S')
parse_date_time2(paste(reserve$checkin_date,reserve$checkin_time), orders = '%Y-%m-%d %H:%M:%S')
#POSIXlt형 변환
as.POSIXlt(reserve$reserve_datetime, format='%Y-%m-%d %H:%M:%S')
as.POSIXlt(paste(reserve$checkin_date,reserve$checkin_time), format='%Y-%m-%d %H:%M:%S')
#POSIXlt형 변환(첫번째 파라미터가 character vector여야 함)
fast_strptime(reserve$reserve_datetime,format='%Y-%m-%d %H:%M:%S')
fast_strptime(paste(reserve$checkin_date,reserve$checkin_time), format='%Y-%m-%d %H:%M:%S')
#Date형으로 변환
as.Date(reserve$reserve_datetime, format='%Y-%m-%d')
as.Date(paste(reserve$checkin_date,reserve$checkin_time), format='%Y-%m-%d')
년, 월, 일, 시, 분, 초, 요일 추출
#reserve_datetime을 POSIXct형으로 변환
reserve$reserve_datetime_ct <- as.POSIXct(reserve$reserve_datetime, orders = '%Y-%m-%d %H:%M:%S')
#reserve_Datetime을 POSIXlt형으로 변환
reserve$reserve_datetime_lt <- as.POSIXlt(reserve$reserve_datetime, orders = '%Y-%m-%d %H:%M:%S')
#POSIXct형과 Date형은 함수로 특정 일시 요소를 얻는다
#(내부에 일시 요소를 추려내기 위한 계산을 실행한다)
#POSIXlt형은 직접 특정 일시 요소를 추려낼 수 있다
#년도 추출
year(reserve$reserve_datetime_ct)
year(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$year
#월 추출
month(reserve$reserve_datetime_ct)
month(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$mon
#일 추출
days_in_month(reserve$reserve_datetime_ct)
days_in_month(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$mday
#요일 추출
weekdays(reserve$reserve_datetime_ct)
weekdays(reserve$reserve_datetime_lt)
#시간을 얻는다
hour(reserve$reserve_datetime_ct)
hour(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$hour
#분을 얻는다
minute(reserve$reserve_datetime_ct)
minute(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$min
#초를 얻는다
second(reserve$reserve_datetime_ct)
second(reserve$reserve_datetime_lt)
reserve$reserve_datetime_lt$sec
#지정한 포맷의 문자열로 변환한다
format(reserve$reserve_datetime_ct, '%Y%m%d %H%M%S')
format(reserve$reserve_datetime_lt, '%Y%m%d %H%M%S')
시간차 계산
POSIXct 형끼리는 단순 계산(-)하면 초단위로 값을 return
Date형 끼리의 계산은 일단위로 값을 return
#checkin_datetime 과 reserve_datetime 간 시간차 계산
reserve$checkin_datetime <- as.POSIXct(paste(reserve$checkin_date, reserve$checkin_time), format='%Y-%m-%d %H:%M:%S')
#년도 차이를 계산(월 이하의 날짜 요소는 고려하지 않음)
year(reserve$checkin_datetime) - year(reserve$reserve_datetime_ct)
#월 차이를 계산(일 이하의 날짜 요소는 고려하지 않음)
(year(reserve$checkin_datetime) * 12 + month(reserve$checkin_datetime)) -
(year(reserve$reserve_datetime_ct) * 12 + month(reserve$reserve_datetime_ct))
# difftime 함수는 시간차를 계산하는 함수이며
# 1,2번 파라미터에 일시형 데이터를 지정하며 POSIXct, POSIXlt 형 모두 지정 가능
# units 파라미터는 시간 계산 단위
# units 종류 : auto, secs, mins, hours, days, weeks
#일 단위로 계산
difftime(reserve$checkin_datetime, reserve$reserve_datetime_ct, units = 'days')
#시간단위 계산
difftime(reserve$checkin_datetime, reserve$reserve_datetime, units = 'hours')
#분단위 계산
difftime(reserve$checkin_datetime, reserve$reserve_datetime, units = 'mins')
#초단위 계산
difftime(reserve$checkin_datetime, reserve$reserve_datetime, units = 'secs')
일시형의 증감
R에서 일시형 데이터는 POSIXct형, Date 형에 직접 수치를 증감 시킴
POSIXct형은 초단위 Date형은 일단위로 수치를 증감시킴
lubridate 패키지의 weeks, days, hours, minutes, seconds 함수를 통해
원래 데이터형에 상관없이 시간 단위를 지정 할 수 있음
library(lubridate)
#reserve_datetime을 date type으로 변경
reserve$reserve_date <- as.Date(reserve$reserve_datetime, orders = '%Y-%m-%d %H:%M:%S')
#reserve_datetime, reserve_date 에 1일을 더한다
reserve$reserve_datetime_ct + days(1)
reserve$reserve_date + days(1)
#reserve_datetime에 1시간을 더한다
reserve$reserve_datetime_ct + hours(1)
#reserve_datetime에 1분을 더한다
reserve$reserve_datetime_ct + minutes(1)
#reserve_datetime에 1초를 더한다
reserve$reserve_datetime_ct + seconds(1)
'IT > R (데이터전처리대전 따라하기)' 카테고리의 다른 글
R null 값을 평균값으로 보완 (0) | 2020.02.03 |
---|---|
R null 값 찾기, 제거, 치환(nvl) (0) | 2020.02.02 |
R 조건에 따라 조인할 마스터 테이블 변경하기 (0) | 2020.01.18 |
R 조인 (0) | 2020.01.12 |
R 순위 구하기 (0) | 2020.01.09 |