Rに次の形式のXTSタイムシリーズがあり、別のプログラムで作業するためにCSVとしてエクスポートする前に、処理、サブセット化、および再配置を実行しようとしています。
_head(master_1)
S_1
2010-03-03 00:00:00 2.8520
2010-03-03 00:30:00 2.6945
2010-03-03 01:00:00 2.5685
2010-03-03 01:30:00 2.3800
2010-03-03 02:00:00 2.2225
2010-03-03 02:30:00 2.0650
_
そして
_str(master_1)
An ‘xts’ object from 2010-03-03 to 2010-05-25 08:30:00 containing:
Data: num [1:4000, 1] 2.85 2.69 2.57 2.38 2.22 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr "S_1"
Indexed by objects of class: [POSIXt,POSIXct] TZ:
Original class: 'Zoo'
xts Attributes:
List of 1
$ dateFormat: chr "Date"
_
そして、これをdata.frameに変換して、より簡単に操作して別のプログラムにエクスポートできるようにしたいと考えています。ただし、test1 <- as.data.frame(master_1)
を使用すると、test1にはインデックス(日付と時刻)が表示されます。
_head(test1)
S_1
2010-03-03 00:00:00 2.8520
2010-03-03 00:30:00 2.6945
2010-03-03 01:00:00 2.5685
2010-03-03 01:30:00 2.3800
2010-03-03 02:00:00 2.2225
2010-03-03 02:30:00 2.0650
_
ただし、インデックスは表示されません。
_str(test1)
'data.frame': 4000 obs. of 1 variable:
$ S_1: num 2.85 2.69 2.57 2.38 2.22 ...
_
また、csv write.csv(master_1, file="master_1.csv")
を作成しても、時刻や日付は含まれません。これはなぜですか、また日付/時間データを列としてどのように含めることができるので、他のRコマンドで使用され、適切にエクスポートされますか?
助けてくれてありがとう。
これは、日付がdata.frameの行名であるためです。それらを別の列にする必要があります。
これを試して:
data.frame(date=index(master_1), coredata(master_1))
これは少し補足ですが、パッケージggplot2
のfortify(...)
関数は、xts
オブジェクトを含む、ggplot(...)
での使用に適したさまざまなオブジェクトをデータフレームに変換します。
library(xts)
set.seed(1) # for reproducible example
master_1 <- xts(rnorm(10,mean=2,sd=0.1),as.POSIXct("2010-03-03")+30*(0:9))
library(ggplot2)
df <- fortify(master_1)
head(df)
# Index master_1
# 1 2010-03-03 00:00:00 1.937355
# 2 2010-03-03 00:00:30 2.018364
# 3 2010-03-03 00:01:00 1.916437
# 4 2010-03-03 00:01:30 2.159528
# 5 2010-03-03 00:02:00 2.032951
# 6 2010-03-03 00:02:30 1.917953
したがって、gggplot
を既に使用している場合、これは簡単な方法です。インデックスは、Index
(大文字の "I")という名前の列に入ることに注意してください。
1.9.6
インデックスクラスを失うことなく、xts
との間で直接変換できます。単純な:
as.data.table(master_1)
インデックスは結果の最初の列として追加されますdata.table
、インデックスDate
またはPOSIXct
クラスを保持します。
シェーンは正しいです。あなたはindex(your xts)を探しているかもしれません。これが再現可能な例です。
library(xts)
example(xts)
x = head(sample.xts)
datefield = index(x)
newdf = data.frame(x,datefield)
その後、単純にcsvにエクスポートできるはずです。もちろん、行の名前も変更できます。
Xtsオブジェクトを、Zoo::fortify.Zoo()
を使用して「Index」という名前の列としてインデックスを含むdata.frameに変換できます。
Ggplot2は必要ありませんが、xts(またはZoo)とggplot2がロードされている場合は、これは引き続き機能します。
例えば:
library(xts)
data(sample_matrix)
x <- as.xts(sample_matrix, dateFormat = "Date")
my_df <- fortify.Zoo(x)
head(my_df)
# Index Open High Low Close
# 1 2007-01-02 50.03978 50.11778 49.95041 50.11778
# 2 2007-01-03 50.23050 50.42188 50.23050 50.39767
# 3 2007-01-04 50.42096 50.42096 50.26414 50.33236
# 4 2007-01-05 50.37347 50.37347 50.22103 50.33459
# 5 2007-01-06 50.24433 50.24433 50.11121 50.18112
# 6 2007-01-07 50.13211 50.21561 49.99185 49.99185
str(my_df)
# 'data.frame': 180 obs. of 5 variables:
# $ Index: Date, format: "2007-01-02" "2007-01-03" ...
# $ Open : num 50 50.2 50.4 50.4 50.2 ...
# $ High : num 50.1 50.4 50.4 50.4 50.2 ...
# $ Low : num 50 50.2 50.3 50.2 50.1 ...
# $ Close: num 50.1 50.4 50.3 50.3 50.2 ...