여섯 자리 글자를 시분초로 읽는 방법
000003 -> 3초
120304 -> 12시 3분 4초
182433 -> 18시 24분 33초
각각 6자리를 hour minute second로 해석하고 싶을 때 R에서 해결방법을 알아보자
해결방법
1. 먼저 6자리 character를 세팅해놓는다.
data <- data2020 # dataframe 이름
data$date <- as.character(data$timeininteger) # column 이름 ex. 020434
data$date <- str_pad(data$date, 6, side="left", pad="0") # 만약 6자리 아니면 옆에 0으로 채우주기
2. 6자리 글자 안에 : 를 삽입한다.
library(lubridate)에 hms라는 함수를 사용하기 위해서는 : 가 필요하다
즉 위의 예시에서
000003 -> 00:00:03 -> 3초
120304 -> 12:03:04 -> 12시 3분 4초
182433 -> 18:24:33 -> 18시 24분 33초
이렇게 바꿀 필요가 있다.
이를 위해서 Regular expression 정규표현식을 사용해서 삽입한다.
Reference : https://stackoverflow.com/questions/38704603/how-to-add-a-character-to-a-string-in-r
data$hms <- sub("(.{2})(.*)", "\\1:\\2", data$date)
data$hms <- sub("(.{5})(.*)", "\\1:\\2", data$hms)
data$hms <- sub("(.{2})(.*)", "\\1:\\2", data$date)
data$hms <- sub("(.{5})(.*)", "\\1:\\2", data$hms)
첫번째 그룹인 (.{2}) 는 앞에 두 글자를 의미한다.
두번째 그룹인 (.*)는 그 뒤 오는 문자들을 의미한다.
\\1:\\2 인 첫번째 그룹과 두번째 그룹 사이에 : 를 삽입한다는 의미이다.
여기까지 실행하면 120304는 12:0304가 된다.
분과 초를 구분하기 위해 2를 5로만 바꾸고 비슷한 과정을 수행한다.
sub("(.{5})(.*)", "\\1:\\2", data$hms) 까지 실행하면 12:03:04가 된다.
3. hms 함수 실행
data$hms <- hms(data$hms)
이렇게 되면 12:03:04가 12시 3분 4초로 POSIXct 또는 data를 읽을 수 있는 형태로 바뀐다.
4. 이걸로 hour 같은 작업 수행 가능
data$hour = hour(data$ymd_hms)
ggplot(data) +
geom_bar(mapping=aes(x=hour))
간단하게 hour 단위로 사건 발생 수를 확인하면 이런 표로 분석할 수 있다.
'명령어 등등' 카테고리의 다른 글
해당 경로에서 폴더마다 용량 체크 du -sh * | sort -hr (0) | 2023.04.26 |
---|---|
[R] 과학적 표기법 바꾸기 options(scipen=10000) (0) | 2023.04.24 |
파일 개수 세기 ls : ls -l | grep ^- | wc -l. (0) | 2023.04.15 |
[R] 클립보드 복사 사용해서 R 데이터 불러오기 read.table(file="clipboard") (0) | 2023.02.15 |
[R] 한글 들어간 dataframe 제대로 저장하는 법 write.csv (0) | 2023.02.04 |
vscode를 터미널에서 바로 띄우기 ($ code .) 그리고 에러 해결 (0) | 2022.07.18 |
shell script 에서 for문 쓰기 (loop) (0) | 2022.06.07 |
shell script 폴더 있는지 확인하고 생성하기 (0) | 2022.06.07 |