2017-09-07 22 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

ちなみに、目標は午前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 
関連する問題