시간형 자료를 lubridate로 관리하기
2019. 5. 6. 21:30ㆍR/Basic
as.Date보다 손쉽게 시간형 데이터를 관리할 수 있는 패키지다
기본 포맷
## 시간형을 선언하지 않으면 문자열로 인식한다
> '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"
lubridate는 형식에 구애받지 않고, 사람이 일반적으로 상상할 수 있는 다양한 형식으로 입력한 데이터를 시간 데이터로 인식한다.
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"
세계에는 다양한 날짜 기입 방법이 있다. 연-월-일 / 월-일-연 / 일-월-연의 형식만 ymd, mdy, dmy로 지정해 주면 r이 알아서 데이터를 인식하여 표시해준다.
## 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"
as.POXITct 보다 훨씬 유연하기 때문에 사용하기 편하다.
시간 정보 추출
셀에서 특정 시간 정보를 추출하는 방법은 아래와 같다
## 시간 정보 선택
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)
시간 정보 연산
## 시간 정보 연산
> 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"
lubridate로 입력된 시간정보는 자유롭게 날짜와 시간을 더하고 뺄 수 있다
범위 형태로 날짜의 행렬을 반환 받을 수도 있다
ymd('2019.05.1') + days(0:30)
LA Lakers 데이터셋을 활용한 실습
lakers는 2008-2009 시즌 동안 LA 레이커스팀의 득점 데이터를 기록한 데이터다
lubridate 패키지 함수를 사용하여 아래 작업을 할 것이다
-
날짜와 시간 데이터를 하나로 합침
-
월별로 슛의 종류 별 득점의 합
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
시간 정보가 하나로 합쳐진 것을 알 수 있다. 이제 시간에서 월 정보를 추출한 후 그룹 정렬과 요약을 할 것이다
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
lakers.shoot %>% ggplot() + geom_col(aes(x = month, y = sum.point, fill = type))
특정 기간 동안의 데이터를 lubridate로 검색하기
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)
'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 |