ケィオスのRメモランダム

Rを使いこなすためのちょっとしたメモです

【Rで時系列解析】時間型データのミリ秒を扱う

Rで生体信号時系列を扱うとき,時刻はミリ秒まで扱いたい場合があります.デフォルトでは,Rは秒の小数以下を表示しません.元のデータにはミリ秒まで記録してあるのに,「なんで表示してくれないの?」,「ミリ秒の値を捨てちゃったの?」という疑問がわきます.しかし,安心してください,見えていないだけで,ミリ秒の値はデータとして残ってます.

ミリ秒のデータを扱うために,今回やることは,digitsdigits.secsのパラメタの値を変更するだけです.変更したら元に戻したくなるかもしれませんので,念のためでデフォルトの値を確認しておきます.

Rで以下を実行してください.

# 今回扱うパラメタ値の確認
options()$digits
options()$digits.secs

digitsは7, digits.secsはNULLになっていると思います.

時刻としてミリ秒まで表示

 時刻をミリ秒まで表示したいときは,以下のコマンドを実行します.

options(digits.secs=3)

 以下は,実際に試してみるRスクリプトです.

# 現在の時刻を代入
t.samp <- Sys.time()
############################
#秒を小数の桁まで表示
options(digits.secs=3)
############################
t.samp # 表示の確認

時刻を数値データに変更してミリ秒まで表示

 digits.secs=3を設定しても,時刻データをas.numericで数値に変更した場合に,期待外れの結果になることがあります.例えば,

# ミリ秒まで表示したい
options(digits.secs=3)
# 現在の時刻を代入
t.samp <- Sys.time()
# 数値に変換
as.numeric(t.samp)

を実行すると,整数の秒で表示されます.つまり,秒単位の数値にしたのに,ミリ秒 (小数以下)まで表示されません.

この問題を解決するためには,

options(digits=13)

を実行します.この宣言をしないと,小数以下がないデータとして扱われます.

# 数値データに変更して,ミリ秒まで扱う場合は,この設定が必要
options(digits=13)
# 現在の時刻を代入
t.samp <- Sys.time()
# 数値に変換
as.numeric(t.samp)

謝辞

今回は,以下の記事を参考にさせていただきました.

Rでミリ秒を扱う:komlog:SSブログ

大変参考になりました.ありがとうございました.