2017-09-07 2 views
1

열의 값 목록을 시간 : 분 : 초에서 초로 변환하려고 시도하고 있습니다. 값이 H : M : S 형식 인 한 아래의 코드는 제대로 작동하지만 M : S 형식 (시간 없음)의 임의의 행에 값이 있습니다. 내가 아래 코드를 수행하려고 할 때, 나는 분명히 그 값들 각각에 대해 NA를 얻는다. M : S 형식의 값과 H : M : S 형식의 값만 검색하여 별도로 변환 할 수있는 방법이 있습니까? 한번에 모두 변환 할 수 있도록 각 M : S 값에 시간 값을 추가해야합니까? 아래에있는 내 코드는 다음 lubridate 패키지를 사용하는 동안시간 : 분 : 초에서 초

as.numeric(strptime(df$x, format="%H:%M:%S") - as.POSIXct(format(Sys.Date())), units="secs") 

Example of data: 
    Time 
    12:22:05 
    42:44 

Example of data after running above: 
    Time 
    44525 
    NA 

답변

3

parse_date_time을보십시오.

df$time <- parse_date_time(x = df$time, c("HMS","MS")) 
+0

참고로, 목표는 자정 이후의 초 수 (OP의 편집을 알 덕분입니다 : S 형식을 구현하기 위해 또한 아주 쉽게 보인다 방금). – Frank

+0

고마워, 나는 이것이 효과가 있다고 생각한다. 한번 실행하면 대답을 받아 들일 것입니다! 나는 실제로 H : M : S에서 S 로의 전환을 찾고 있습니다. 자정 이후로 몇 초가 걸리지 않았습니다. 24 시간 이상있는 몇 가지 값이 있으므로 이전에 사용한 메서드에 대해 생각하면 그 값이 너무 잘 작동하지 않습니다. – coderX

+0

'lubridate'는 시간을 소요하고 그것이 나타내는 하루의 초 수를 반환하는'period_to_seconds' 함수를 가지고 있습니다. 저는 왜 당신이 '24'를 초과하는 시간 값을 가지고 있는지에 대해 다소 혼란 스럽습니다 ... 시간이 아니라 지속 시간입니까? –

1

는 M에 시간 값을 추가 할 제안 :

x = c("12:22:05", "42:44") 
x[nchar(x)<8] <- paste0("00:", x[nchar(x)<8]) 
as.numeric(strptime(x, format="%H:%M:%S") - as.POSIXct(format(Sys.Date())), units="secs") 
## 44525 2564 
관련 문제