1. 티블에서 시간 표현
- 데이트형 : 날짜형 <date>
- 타임형 : 시간형 <time>
- 데이트타임형 : 데이트타임형 <dttm>
2. 날짜 및 시간 데이터 생성
- 날짜/시간 생성
- 현재 날짜 및 시간 생성 : today(), now() 함수 사용
- 날짜 및 시간 변환 함수 : as_date, as_datetime 함수 사용 (수치값은 1970-01-01을 기준으로 지난 시간 제공)
today() # [1] "2024-06-12"
now() # [1] "2024-06-12 17:13:30 KST"
as_datetime(today()) # [1] "2024-06-12 UTC"
as_date(now()) # [1] "2024-06-12"
as_datetime(24*60*60) # [1] "1970-01-02 UTC"
as_date(365*50) # [1] "2019-12-20"
- 데이터 로딩 : readr 함수를 사용할때 ISO8601 날짜/시간을 포함하고 있으면 따로 설정 안해도 됨
(* IS08601 포맷 : 날짜의 구성요소는 "-"로 구분하고, 시간의 구성요소는 ":"로 구분하며, 날짜와 시간 사이에는 공백이나 T를 사용)
(* 포맷 형식이 다르면 readr 함수 파라미터 col_types 파라미터 사용해해서 format 지정)
%Y | 4자리 연도 | %d | 날짜 | %p | AM/PM | %. | 숫자가 아닌 글자 스킵 |
%y | 2자리 연도 | %e | 날짜(두자리) | %M | 분 | %* | 숫자가 아닌 여러 글자 스킵 |
%m | 월(숫자) | %H | 24시간제 시간 | %S | 초 | 시간 포맷 형식 | |
%b(%B) | 월(문자) | %I | 12시간제 시간 | %OS | 실수 초 |
csv <- "
date, datetime
2022-01-02, 2022-01-02T05:12"
read_csv(csv)
csv <- "
date
01/02/15"
read_csv(csv, col_types = cols(date = col_date("%m/%d/%y")))
- 문자열 벡터 : 파싱함수(parse_date, parse_time, parse_datetime) 사용 (format 파라미터 사용)
parse_date("2023+03+25", format = "%Y+%m+%d") # [1] "2023-03-25"
parse_date(c("[John]2023-03-02",
"[Max]2005-12-15"),format = "%*%Y-%m-%d") # [1] "2023-03-02" "2005-12-15"
- 도우미 함수 사용 : y(연도), m(월), d(일), h(시간), m(분), s(초)를 주어진 날짜에 따라 조합하여 사용
(* ymd, mdy처럼 사용 가능하며 문자형 벡터가 아닌 숫자형 벡터에도 적용이 가능)
(* 시간을 나타내는 h, hm, hms를 사용하는 경우 날짜를 나타내는 조합과 "_"로 구분)
- ymd : 년도-월-일 순서로 데이트형 객체로 반환
- ymd_hm : 년도-월-일 시간:분 순서로 데이트타임형 객체로 반환
ymd("2002-12-25") # 2002-12-25
mdy("12/25/02") # 2002-12-25
dym("25*&02&*12") # 2002-12-25
ymd_hms("2017-Jan-31 20:11:59") # [1] "2017-01-31 20:11:59 UTC"
mdy_hm("jan/31/2017T08:01") # [1] "2017-01-31 08:01:00 UTC"
- 개별 구성요소에서 생성 : 데이트(타임)형의 구성요소들이 여러 열에 걸쳐 있는 경우 make_date( ), make_datetime( ) 함수 사용
3. 데이트(타임)형 구성요소
앞에서 여러가지 방법으로 변환한 데이트(타임)형 객체에서 다양한 구성요소를 추출할 수 있습니다.
year | 연도(年度) 반환 | hour | 시간 반환 |
month | 월(月) 반환 | minute | 분 반환 |
day | 일(日) 반환 (= mday 함수) | second | 초 반환 |
wday | 한주에서 며칠인지 반환 (일요일 : 1 ~ 토요일 : 7 ) |
yday | 해당 년도에서 며칠이 지났는지 반환 |
- month, wday 함수에서 label=T로 설정하면 로캘(locale)에 따른 월과 일의 약식이름을 반환하며 abbr=F인 경우 전체 이름 반환
- 반올림함수 : floor_date, round_date, ceiling_date
(반올림하는 단위를 unit 파라미터로 설정할 수 있으며 second, minute, hour, day, week, month, bimonth, quarter, season, halfyear and year 등을 지정할 수 있다)
datetime <- ymd_hms("2026-07-08T12:34:56")
datetime # [1] "2026-07-08 12:34:56 UTC"
datetime |> year() # [1] 2026
datetime |> month() # [1] 07
datetime |> month(label = T) # [1] Jul
datetime |> month(label = T, abbr=F) # [1] July
datetime |> day() # [1] 8
datetime |> mday() # [1] 8
datetime |> yday() # [1] 189
datetime |> wday(label = F) # [1] 4
datetime |> wday(label = T) # [1] Wed
datetime |> wday(label = T, abbr = F) # [1] Wednesday
4. 시간 범위
- 듀레이션형 : 정확한 초를 나타냄
as.duration(difftime) | difftime 객체를 초로 반환 | dseconds(numeric) | 초를 반환 |
dminutes(numeric) | 분을 초로 반환 | dhours(numeric) | 시간을 초로 반환 |
ddays(numeric) | 일을 초로 반환 | dweeks(numeric) | 주를 초로 반환 |
dmonths(numeric) | 월을 초로 반환 | dyears(numeric) | 년을 초로 반환 |
- 피어리드형 : 시간의 범위로 사람이 생각하는 시간으로 동작한다
seconds(n) | n초를 반환 | minutes(n) | n분을 반환 |
hours(n) | n시간을 반환 | days(n) | n일을 반환 |
months(n) | n월을 반환 | weeks(n) | n주를 반환 |
years(n) | n년을 반환 | period(num, unit) | 주어진 유닛에 따른 시간단위을 반환 |
듀레이션은 정확한 초를 나타내서 일광절약제(한국에서는 사용안함) 및 윤년(2월 29일까지 있는 해)이 적용되어 표시되나 피어리드형은 사람의 시간으로 직관적으로 동작하기에 하루/일년이 지난 시간으로 나온다.
ymd("2024-01-01") + dyears(1) #[듀레이션] "2024-12-31 06:00:00 UTC"
ymd("2024-01-01") + years(1) #[피어리드] "2025-01-01"
'Data Science > Manipulation' 카테고리의 다른 글
[Data Science With R] 13. 함수형(Functional) with Base and purrr (0) | 2023.04.16 |
---|---|
[Data Science With R] 12. 함수(Function) (0) | 2023.04.16 |
[Data Science With R] 10. 범주형 데이터 조작 with forcats (202406) (0) | 2023.04.08 |
[Data Science With R] 9. 정규표현식(Regular Expression) with Stringr (202406) (0) | 2023.04.04 |
[Data Science With R] 8. 관계형 데이터 (0) | 2023.04.01 |