'RPOSIXlt'에 해당되는 글 1건

  1. 2020.03.26 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)

 

 

 

 

 

 

 

Posted by 소율소희아빠
이전버튼 1 이전버튼

블로그 이미지
소율소희아빠

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.5
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함