2017-10-25 5 views
1

내가있어 같은 문자 벡터 (은 SQL의 결과이었던 간격 유형 열을에 선택) :SQL 간격을 문자열로 변환하는 방법은 lubridate 기간입니까?

나는 lubridate 시간 객체로 변환 할 필요가
[1] "00:01:13"  "00:00:33"  "00:08:23"  "00:00:13"  "5 days 22:07:16" "00:01:04"  "00:00:14"  "00:05:22"  
[9] "00:04:01"  "00:02:39"  "00:04:24"  "00:05:45"  "3 days 22:38:11" "00:05:50"  "00:03:22"  "00:00:34"  
[17] "00:03:35"  "00:02:09"  "00:01:28"  "00:06:06"  "00:03:37"  "00:00:08"  

. 며칠이 없다면 hms() 함수를 사용하여 수행 할 수 있습니다. 벡터에 날짜가있을 때 어떻게해야합니까?

+1

먼저 "sub"를 사용하여 "days"를 제거하십시오. 'sub ("^ \\ d + days", "", myVec)'와 같습니다. – lmo

+0

나는 그러한 모든 문자열을 기간으로 변환 할 수있는 함수를 찾고 있는데, 'days'부분도 적절하게 포함 할 것입니다. lubridate 나 다른 패키지에 아무것도 없다면, 나는 혼자서 뭔가를 구현해야 할 것입니다. –

답변

1

약간의 해결책이 있습니다. 나는 빠른 대답은 lubridate으로 이것을 할 수있는 방법이라고 생각한다. 그러나 문자열을 적절한 형식으로 가져 오려면 몇 가지 작업을 수행해야합니다. 이 아이디어는 정보를 정규 표현식 stringr()을 사용하여 사용 가능한 형식으로 변환 한 다음 데이터를 period 형식으로 변환하는 것입니다.

test <-c("00:01:13","00:00:33","00:08:23","00:00:13", 
     "5 days 22:07:16", "00:01:04","00:00:14","00:05:22") 
test_df <- data.frame(time = test) 

우선 사용할 수있는 형식으로 데이터를 포맷하는 것입니다

test_df <- test_df %>% 
mutate(time = stringr::str_replace_all(time, ':', ' ')) %>% 
mutate(time = stringr::str_replace(time, '\\sdays', '')) %>% 
mutate(time = ifelse(nchar(time) < 10, paste('0', time), time)) %>% 
separate(time, c('day', 'hour', 'minute', 'second')))) 

우리는 다음 paste() 다시 함께 좋은 형식으로 데이터를 얻을 수 hms()lubridate를 사용할 수 있습니다.

test_df <- test_df %>% 
mutate(time = paste(hour, minute, second)) %>% 
mutate(time = hms(time)) %>% 
mutate(time = time + days(day)) 

필요성을 충족합니까?