2012-03-23 5 views
59

日付部分を破棄する一連のPOSIXctオブジェクトから時間を抽出するにはどうすればよいですか?例えばPOSIXctからの時間の抽出

、私が持っている:これらの日付に対応

times <- structure(c(1331086009.50098, 1331091427.42461, 1331252565.99979, 
1331252675.81601, 1331262597.72474, 1331262641.11786, 1331269557.4059, 
1331278779.26727, 1331448476.96126, 1331452596.13806), class = c("POSIXct", 
"POSIXt")) 

"2012-03-07 03:06:49 CET" "2012-03-07 04:37:07 CET" 
"2012-03-09 01:22:45 CET" "2012-03-09 01:24:35 CET" 
"2012-03-09 04:09:57 CET" "2012-03-09 04:10:41 CET" 
"2012-03-09 06:05:57 CET" "2012-03-09 08:39:39 CET" 
"2012-03-11 07:47:56 CET" "2012-03-11 08:56:36 CET" 

は今、私はそれらの回で

val <- c(1.25343125e-05, 0.00022890575, 
     3.9269125e-05, 0.0002285681875, 
     4.26353125e-05, 5.982625e-05, 
     2.09575e-05, 0.0001516951251, 
     2.653125e-05, 0.0001021391875) 

を測定したパラメータの値をいくつか持っています私はvalを測定した特定の日に関係なく、valとvsの時間をプロットしたいと思います。

私にそれを可能にする特定の機能はありますか?

答えて

76

あなたは、任意の文字形式に日付時刻を変換するstrftimeを使用することができます。

> t <- strftime(times, format="%H:%M:%S") 
> t 
[1] "02:06:49" "03:37:07" "00:22:45" "00:24:35" "03:09:57" "03:10:41" 
[7] "05:05:57" "07:39:39" "06:47:56" "07:56:36" 

しかし、それはあなたがあなたのデータをプロットしたいから、あまり役に立ちません。

plot(xx, rnorm(length(xx)), xlab="Time", ylab="Random value") 

> xx <- as.POSIXct(t, format="%H:%M:%S") 
> xx 
[1] "2012-03-23 02:06:49 GMT" "2012-03-23 03:37:07 GMT" 
[3] "2012-03-23 00:22:45 GMT" "2012-03-23 00:24:35 GMT" 
[5] "2012-03-23 03:09:57 GMT" "2012-03-23 03:10:41 GMT" 
[7] "2012-03-23 05:05:57 GMT" "2012-03-23 07:39:39 GMT" 
[9] "2012-03-23 06:47:56 GMT" "2012-03-23 07:56:36 GMT" 

は今、あなたはあなたのプロットでこれらのdatetimeのオブジェクトを使用することができます回避策の一つは、あなたの時代からの日付要素を取り除くために、そして、あなたの時間のすべてに同じ日付を追加することですより多くのヘルプについてenter image description here


?DateTimeClasses

12
を見ます

このトリックを示した以前の回答がありました。本質的には:

  • あなたは、イントラ日変化を強調し、あなたは「オーバーレイ」にしたい場合は1つのプロットに価値が数日間、すべての既存のプロット関数

  • を活用するためにPOSIXctタイプを保持しなければなりません、最高のトリックがあまりにもある...

  • (必要であれば、ここの場合されていない、と月とさえ年)同じ日を課す

POSIXltの表現では、月の日付と月のコンポーネントを上書きすることによって、または異なる日の間の0:00:00を基準にした 'デルタ'をオフセットすることによって行うことができます。親切timesvalとそう

あなたが提供する:

## impose month and day based on first obs 
ntimes <- as.POSIXlt(times) # convert to 'POSIX list type' 
ntimes$mday <- ntimes[1]$mday # and $mon if it differs too 
ntimes <- as.POSIXct(ntimes) # convert back 

par(mfrow=c(2,1)) 
plot(times,val) # old times 
plot(ntimes,val) # new times 

は、オリジナルと修正の時間スケールを対照的な、これを得られます。

enter image description here

3

私が扱って何かを見つけることができませんクロック時間が正確です。パッケージからいくつかの関数を使用するだけです:lubridateとseconds-since-midnight:

require(lubridate) 
clockS = function(t){hour(t)*3600+minute(t)*60+second(t)} 
plot(clockS(times),val) 

次に、軸のコードの一部を見て、軸をうまくラベル付けする方法を知りたい場合があります。

+0

ニース、私は 'lubridate'を見なければならない、興味深いパッケージのようです。 – nico

2

GMTの午前0時の値は、常に8640024 * 3600)で割り切れます。 GMTの秒後の値はtime %% 86400です。 GMTで

時間は(time %% 86400)/3600であり、これは、プロットのx軸として使用することができる。

plot((as.numeric(times) %% 86400)/3600, val) 

enter image description here

モジュラスを取るまでの時間を調整し、時間帯を調整しますタイムゾーンがGMTよりも前にある秒数を追加します。たとえば、米国中央夏時間(CDT)はGMTの5時間遅れです。 CDTでの時間に対してプロットするには、以下の式が使用されます。

plot(((as.numeric(times) - 5*3600) %% 86400)/3600, val) 
3

多くのソリューションが提供されてきたが、私は、パッケージCHRONを使用して、この1、見ていない:

hours = times(strftime(times, format="%T")) 
plot(val~hours) 

(申し訳ありませんが、私は画像を投稿する資格がありません、あなたはそれを自分でプロットする必要があります)

関連する問題