web-dev-qa-db-ja.com

データフレームをxtsに変換する

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

これは私が考えることができる最も簡単な例ですので、それが機能しないのはかなりイライラします...任意の助けをいただければ幸いです!

47
user442446

これは明確に文書化されています--- xts および Zoo オブジェクトはtwo引数を提供することにより形成され、データを運ぶvectorまたはmatrix、およびDatePOSIXctchron、...時間情報を提供するタイプ(または Zoo 順序の場合)。

のようなことをする

 qxts <- xts(q[,-1], order.by=q[,1])

設定する必要があります。

74

さて、as.xtsはデフォルトで日付がdata.frameの行名に保存されていると想定しています。したがって、エラーメッセージ。迅速で汚い修正は:

rownames(q) = q[1]
as.xts(q)

ただし、日付文字列を含む列が追加されます。理想的には、日付を行名として開始するdata.frameを作成します。

19
Dr G

これは、データフレームを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オブジェクトです。

6
Matt Dancho

考えられる解決策は次のとおりです。

library(timetk)
q <- xts::xts(q[,-1], order.by = q$t)
0
Gregory Lopez