명령어 등등

[R] R로 시간 분석하기 / 여섯 자리 글자를 시분초로 읽는 방법 hms

mcdn 2023. 2. 4. 16:00
반응형

 

여섯 자리 글자를 시분초로 읽는 방법

 

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 단위로 사건 발생 수를 확인하면 이런 표로 분석할 수 있다. 

반응형