시간형 자료를 lubridate로 관리하기
2019. 5. 6. 21:30ㆍR/Basic

as.Date보다 손쉽게 시간형 데이터를 관리할 수 있는 패키지다
기본 포맷
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <code> ## 시간형을 선언하지 않으면 문자열로 인식한다 > '2019-05-06' % > % str chr "2019-05-06" ## as.Date로 시간형으로 선언할 수 있다. > as.Date( '2019-05-06' ) % > % str Date[ 1 : 1 ], format : "2019-05-06" ## 형식을 지키지 않으면 시간으로 인식하지 못한다 > as.Date( '20190506' ) Error in charToDate(x) : 문자열이 표준서식을 따르지 않습니다 ## 순서를 변경해도 인식하지 못한다 > as.Date( '05-06-2019' ) [ 1 ] "0005-06-20" < / code> |
lubridate는 형식에 구애받지 않고, 사람이 일반적으로 상상할 수 있는 다양한 형식으로 입력한 데이터를 시간 데이터로 인식한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <code>library(lubridate) ## yyyy-mm-dd > ymd( '2019-05-06' ) [ 1 ] "2019-05-06" ## mm-dd-yyyy > mdy( '05/06/2019' ) [ 1 ] "2019-05-06" ## dd-mm-yyyy > dmy( '06/05/2019' ) [ 1 ] "2019-05-06" < / code> |
세계에는 다양한 날짜 기입 방법이 있다. 연-월-일 / 월-일-연 / 일-월-연의 형식만 ymd, mdy, dmy로 지정해 주면 r이 알아서 데이터를 인식하여 표시해준다.
1 2 3 4 5 6 7 8 9 10 11 12 | <code> ## yyyy-mm-dd hh:mm:ss > ymd_hms( '2019-05-06 05:23:22' ) [ 1 ] "2019-05-06 05:23:22 UTC" ## yyyy-mm-dd hh:mm > ymd_hm( '2019-05-06 05:22' ) [ 1 ] "2019-05-06 05:22:00 UTC" ## yyyy-mm-dd hh > ymd_h( '2019.05.06 05' ) [ 1 ] "2019-05-06 05:00:00 UTC" < / code> |
as.POXITct 보다 훨씬 유연하기 때문에 사용하기 편하다.
시간 정보 추출
셀에서 특정 시간 정보를 추출하는 방법은 아래와 같다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <code> ## 시간 정보 선택 time = ymd_hms( '2019.05.06 05:33:22' ) time lub.time = matrix(nrow = 1 , ncol = 8 ) % > % as.tibble % > % rename(year = V1, month = V2, day = V3, wday = V4, yday = V5, hour = V6, min = V7, sec = V8) lub.time$year = year(time) lub.time$month = month(time) lub.time$day = day(time) lub.time$wday = wday(time) lub.time$yday = yday(time) lub.time$hour = hour(time) lub.time$ min = minute(time) lub.time$sec = second(time) < / code> |

시간 정보 연산
1 2 3 4 5 6 7 8 9 10 11 | <code> ## 시간 정보 연산 > ymd( '2018.12.31' ) + 1 [ 1 ] "2019-01-01" > ymd( '2019.2.28' ) + 1 [ 1 ] "2019-03-01" > ymd( '2019.05.06' ) - 100 [ 1 ] "2019-01-26" < / code> |
lubridate로 입력된 시간정보는 자유롭게 날짜와 시간을 더하고 뺄 수 있다
범위 형태로 날짜의 행렬을 반환 받을 수도 있다
1 2 | <code>ymd( '2019.05.1' ) + days( 0 : 30 ) < / code> |

LA Lakers 데이터셋을 활용한 실습

lakers는 2008-2009 시즌 동안 LA 레이커스팀의 득점 데이터를 기록한 데이터다
lubridate 패키지 함수를 사용하여 아래 작업을 할 것이다
-
날짜와 시간 데이터를 하나로 합침
-
월별로 슛의 종류 별 득점의 합
1 2 3 4 5 | <code>time.ex = lakers % > % as.tibble time.merged = time.ex % > % mutate(time.stmp = ymd_hm(paste(date, time))) % > % select(time.stmp, everything()) % > % select( - date, - time) % > % na.omit() time.merged < / code> |

시간 정보가 하나로 합쳐진 것을 알 수 있다. 이제 시간에서 월 정보를 추출한 후 그룹 정렬과 요약을 할 것이다
lakers.shoot = time.merged %>% group_by(month(time.stmp), type) %>% filter(points != 0) %>% summarise(sum.point = sum(points)) %>% rename(month = 'month(time.stmp)') str(lakers.shoot) lakers.shoot$month = as.factor(lakers.shoot$month) lakers.shoot$type = as.factor(lakers.shoot$type) lakers.shoot

1 2 3 | <code> lakers.shoot % > % ggplot() + geom_col(aes(x = month, y = sum .point, fill = type )) < / code> |

특정 기간 동안의 데이터를 lubridate로 검색하기
1 2 3 | <code>serch.term = interval(ymd_hms( '2009-01-02 00:00:00' ), ymd_hms( '2009-01-31 23:59:59' )) time.merged % > % filter (time.stmp % within % serch.term) < / code> |

'R > Basic' 카테고리의 다른 글
ggmap으로 지도에 표시하기 (0) | 2019.05.06 |
---|---|
Tidyr의 gather와 spread (0) | 2019.04.29 |
데이터를 클립보드에 읽고 쓰기 (0) | 2019.04.28 |
폴더에서 파일 리스트 가져오기 (0) | 2019.04.27 |
정규 표현식 (0) | 2019.04.22 |