1

次のようなデータセットがあります。

> dput(data)
structure(list(Run = c("Dur 2", "Dur 3", "Dur 4", "Dur 5", "Dur 7", 
"Dur 8", "Dur 9"), reference = c("00h 00m 32s", "00h 00m 31s", 
"00h 05m 46s", "00h 03m 51s", "00h 06m 49s", "00h 06m 47s", "00h 08m 56s"
), test30 = c("00h 00m 44s", "00h 00m 41s", "00h 21m 54s", "00h 13m 37s", 
"00h 28m 48s", "00h 22m 54s", "10h 02m 12s"), test31 = c("00h 00m 39s", 
"00h 00m 45s", "00h 40m 10s", "00h 23m 07s", "00h 35m 23s", "00h 47m 42s", 
"25h 37m 05s"), test32 = c("00h 01m 05s", "00h 01m 13s", "00h 55m 02s", 
"00h 28m 54s", "01h 03m 17s", "01h 02m 08s", "39h 04m 39s")), .Names = c("Run", 
"reference", "test30", "test31", "test32"), class = "data.frame", row.names = c(NA, 
-7L))

私はそれを次のようにプロット可能な形式にしようとしました:

library(reshape2)
library(scales)

# melt the data and convert the time strings to POSIXct format
data_melted <- melt(data, id.var = "Run")
data_melted$value <- as.POSIXct(data_melted$value, format = "%Hh %Mm %Ss")

おそらく、POSOXct が 24 時間の意味で実際の HMS データを期待しているという事実NAのために、最終的な期間の s を取得しています。Dur9

このようなログに記録されたデータを処理するための推奨される方法は何H > 24ですか?

そのようなインスタンスを手動でチェックし、日を表す新しい文字列を作成する必要がありますか (その場合、任意の開始日を作成し、その日をインクリメントする必要があるようですH > 24)。または、すべての時間データが実際のタイムスタンプに従ってログに記録されると仮定するよりも、厳密な時間データに適したパッケージがありますか?

どうもありがとう!

4

1 に答える 1

2

パッケージから使用colsplitしてplyr、時間、分、秒の列を作成difftimeし、日付に追加できるオブジェクトを作成して使用できます

library(plyr)

# note gsub('s','',mdd[['value']]) removes trailing s from each value
# we then split on `[hm]` (ie. h or m)` -- this returns a data.frame with
# 3 integer columns 
times <- colsplit(gsub('s','',mdd[['value']]), '[hm]', names = c('h','m','s'))

seconds <- as.difftime(with(times, h*60*60 + m *60 + s), format = '%X', units = 'secs')
seconds
Time differences in secs
 [1]     32     31    346    231    409    407    536     44     41   1314    817   1728   1374  36132     39     45
[17]   2410   1387   2123   2862  92225     65     73   3302   1734   3797   3728 140679

Mapと を使用して、自分で算術演算を行う必要はありません。Reduce

 Reduce('+',Map(as.difftime, times, units = c('hours','mins','secs')))
于 2013-04-18T05:47:58.867 に答える