As.xts()メソッドを使用してデータフレームをxtsオブジェクトに変換しようとしています。入力データフレームqは次のとおりです。
q
t x
1 2006-01-01 00:00:00 1
2 2006-01-01 01:00:00 2
3 2006-01-01 02:00:00 3
str(q)
'data.frame': 10 obs. of 2 variables:
$ t: POSIXct, format: "2006-01-01 00:00:00" "2006-01-01 01:00:00" "2006-01-01 02:00:00" "2006-01-01 03:00:00" ...
$ x: int 1 2 3 4 5 6 7 8 9 10
結果は次のとおりです。
> as.xts(q)
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
これは私が考えることができる最も簡単な例ですので、それが機能しないのはかなりイライラします...任意の助けをいただければ幸いです!
さて、as.xtsはデフォルトで日付がdata.frameの行名に保存されていると想定しています。したがって、エラーメッセージ。迅速で汚い修正は:
rownames(q) = q[1]
as.xts(q)
ただし、日付文字列を含む列が追加されます。理想的には、日付を行名として開始するdata.frameを作成します。
これは、データフレームをxtsオブジェクトに強制する関数as_xts()
を含むtidyquant
パッケージを使用したソリューションです。また、xtsオブジェクトをチブル(「整頓された」データフレーム)に強制するas_tibble()
も含まれています。
データフレームを再作成します(日時クラスは「整頓された」データフレームで使用されますが、明確な日付または日時クラスは使用できます)。
_> q
# A tibble: 3 × 2
t x
<dttm> <dbl>
1 2006-01-01 00:00:00 1
2 2006-01-01 01:00:00 2
3 2006-01-01 02:00:00 3
_
as_xts()
を使用して、「xts」クラスに変換します。引数_date_col = t
_を指定して、「t」列を行名として使用する日付として指定します。
_> library(tidyquant)
> as_xts(q, date_col = t)
x
2006-01-01 00:00:00 1
2006-01-01 01:00:00 2
2006-01-01 02:00:00 3
_
戻り値は、行名として適切な日付または日時を持つxts
オブジェクトです。
考えられる解決策は次のとおりです。
library(timetk)
q <- xts::xts(q[,-1], order.by = q$t)