web-dev-qa-db-ja.com

Rでファクターを日付/時刻に変換する

これは私のデータフレーム内に含まれる情報です:

## minuteofday: factor w/ 89501 levels "2013-06-01 08:07:00",...
## dDdt: num 7.8564 2.318 ...
## minutes: POSIXlt, format: NA NA NA

分の列を日付/時刻形式に変換する必要があります。

minuteave$minutes <- as.POSIXlt(as.character(minuteave$minuteofday), format="%m/%d/%Y %H:%M:%S")

私はもう試した as.POSIXltas.POSIXctおよびas.Date。どれも機能しませんでした。誰もが何か考えがありますか。

目標は、分とdDdtをプロットすることですが、それを要因として、指定した期間にプロットすることはできません。私は次に何をしようかわからない...

14
elle11e

日時または日付として解析する前に、as.character()を挿入する必要があります。

因子は、常にそのレベルに対応する数値として最初に戻ります。

read.csv()などにファクターとしてストアを指定しないことで、ファクターから文字への変換を保存できます:_stringsAsFactors=FALSE_。また、グローバルオプションとして設定することもできます。

文字として取得したら、フォーマット文字列をデータに一致させてください:

_R> as.POSIXct("2013-06-01 08:07:00", format="%Y-%m-%d %H:%M:%S")
[1] "2013-06-01 08:07:00 CDT"
R> 
_

_%Y-%m-%d_とは対照的に、使用した_%m/%d/%y_に注意してください。

2016年1月3日に編集:これは、factorを含む多くのタイプから自動的に変換する anytime パッケージのおかげで、はるかに簡単になりました。 フォーマット文字列を必要とせずに。

_R> as.factor("2013-06-01 08:07:00")
[1] 2013-06-01 08:07:00
Levels: 2013-06-01 08:07:00
R> 
R> library(anytime)
R> anytime(as.factor("2013-06-01 08:07:00"))
[1] "2013-06-01 08:07:00 CDT"
R> 
R> class(anytime(as.factor("2013-06-01 08:07:00")))
[1] "POSIXct" "POSIXt" 
R> 
_

ご覧のとおり、factor変数をanytime()に入力するだけで、目的のPOSIXct型が出力されます。

20

これを試して

library(lubridate) minuteave$minutes <- ymd_hms(minuteave$minutes)

これは、minuteave $ minutesをPOSIXctオブジェクトとして返します。

これがお役に立てば幸いです。

7
darkage