반응형
시간데이터를 다뤄야 하는 상황이 있습니다. 예를들어 아래와 같이 제품의 판매시간-판매량이 표로 정리되어 있고 이 표를 가지고 그래프를 그리고 싶다고 해봅시다.
Time |
Sales_Volume |
2018-10-21 08:23:12 |
1 |
2018-10-28 15:33:55 |
5 |
2018-11-02 13:23:52 |
12 |
2018-11-08 17:12:01 |
3 |
2018-12-12 10:08:01 |
7 |
판매량은 숫자벡터로 입력하면 되는데, 시간의 경우는 조금 복잡합니다. 먼저 시간을 문자열 벡터로 입력합니다. 입력한 뒤 산점도를 그리겠습니다.
> SV=c(1,5,12,3,7)
> time=c("2018-10-21 08:23:12","2018-10-28 15:33:55","2018-11-02 13:23:52","2018-11-08 17:12:01","2018-12-12 10:08:01")
> plot(time,SV)
Error in plot.window(...) : need finite 'ylim' values
In addition: Warning messages:
1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion
2: In min(x) : no non-missing arguments to min; returning Inf
3: In max(x) : no non-missing arguments to max; returning -Inf
time이 문자열이기 때문에 산점도를 그리려고 하면 에러메시지가 뜹니다. 시간을 문자열이 아닌 수량으로 인식하게 만들어야합니다. strptime 함수를 사용합니다.
>time2=strptime(time,"%Y-%m-%d %H:%M:%S")
어떤 변화가 생긴 것인지 str함수를 이용하여 확인해봅시다.
> str(time)
chr [1:5] "2018-10-21 08:23:12" "2018-10-28 15:33:55" ...
> str(time2)
POSIXlt[1:5], format: "2018-10-21 08:23:12" "2018-10-28 15:33:55" "2018-11-02 13:23:52" ...
문자열(chr)이 POSIXlt 로 변경되었습니다. POSIXlt는 날짜/시간을 나타내는 자료형입니다. 산점도를 그려봅시다.
> plot(time2,SV)
x축에 디폴트로 날짜가 나타난 것을 확인할 수 있습니다. 이번에는 x축을 2018-10-21...형태로 변경해봅시다. x축에 아무 표시도 되지 않은 그래프를 그립시다. xaxt 옵션을 "n"으로 해주시면 됩니다. 디폴트는 "s"입니다.
> plot(time2,SV,xaxt="n")
우리가 입력한 시간벡터 time2의 범위를 찾아봅시다.
> t2_range=range(time2)
> t2_range
[1] "2018-10-21 08:23:12 KST" "2018-12-12 10:08:01 KST"
이 범위를 반올림해줍니다.
> r<-as.POSIXct(round(range(time2),"hours"))
> axis.POSIXct(1,time2,at=seq(r[1],r[2],by="hour"),format="%Y-%m-%d %H:%M")
반응형
'R 주제 > 통게분석(임시)' 카테고리의 다른 글
[R강의] 134. 여러 점들 사이의 코사인 거리 한번에 구하는 법 (dist함수) (2) | 2022.02.19 |
---|---|
R의 lapply 함수(리스트에 원하는 함수를 원하는 방향으로 적용) (0) | 2021.03.18 |
R의 apply 함수(함수를 배열에 원하는 방향으로 적용) (0) | 2021.03.18 |
R에서 날짜 데이터의 연산하기 (0) | 2021.03.18 |
R에서 날짜데이터 입력하기 (as.Date) (0) | 2021.03.18 |
댓글