2010-12-06 109 views
4

時系列データをデータフレームに強制的に変換する簡単な方法は、結果データが元のデータの要約である形式ですか?R:xtsまたはzooオブジェクトをデータフレームに変換する

これはXTSや動物園のオブジェクトに格納されているいくつかの例のデータを、次のようになります。

t,     V1 
"2010-12-03 12:00", 10.0 
"2010-11-04 12:00", 10.0 
"2010-10-05 12:00", 10.0 
"2010-09-06 12:00", 10.0 
...and so on, monthly data for many years. 

と私のようなデータフレームに変換したいと思います:

year, month, V1 
2010, 12, a descriptive statistic calculated of that month's data 
2010, 11, ... 
2010, 10, ... 
2010, 9,  ... 

私は理由これを尋ねるのは、同じプロットで毎月計算されたデータの要約をプロットしたいからです。後者の形式のデータに対してはこれを非常に簡単に行うことができますが、時系列形式のプロット方法は見つかりませんでした。

たとえば、1日の間隔で測定した数年の温度データを持つことができました。同じプロットで毎年の平均気温の曲線をプロットしたいと思います。私はxtsフォーマットのデータを使ってこれを行う方法を考えなかったし、xts/zooフォーマットの目的にも合っていれば、それは常に年の情報をそれに沿って運ぶように見える。

+2

、あなたはそれが「ベストの答え」 –

答えて

6

データのサンプルを用意してください。より一般的ではない回答を提供しようとします。基本的にapply.monthlyを使用して、xtsオブジェクトの要約統計量を計算することができます。次に、インデックスをyearmonに変換し、xtsオブジェクトをdata.frameに変換することができます。

x <- xts(rnorm(50), Sys.Date()+1:50) 
mthlySumm <- apply.monthly(x, mean) 
index(mthlySumm) <- as.yearmon(index(mthlySumm)) 
Data <- as.data.frame(mthlySumm) 
+1

としていくつかの答えを受け入れることが遅すぎることはない知っているそして、あなたは '' as.numeric(形式(指数(x)のような行をformat'で年と月を引き出すことができます"%Y")) 'と' as.numeric(format(index(x)、 "%m")) ' –

+0

これはとても役に立ちました。 index()関数とformat()関数が欠けていました。今では自分のデータで遊ぶ方が簡単です。 – user442446

+3

@ user442446あなたの質問に答えた場合は、「ベストアンサー」としてください。また、あなたの質問に「ベスト・アンサー」を付けていないので、あなたが尋ねた他の5つの質問についてもこれを行うべきです。 –

0

ここtibblesにXTSオブジェクトを強制変換するためのXTSオブジェクトとas_tibble()にデータフレームを強制変換するための関数as_xts()(「整頓」データフレーム)を含むtidyquantパッケージを用いた溶液です。

> data_xts 
      V1 
2010-09-06 10 
2010-10-05 10 
2010-11-04 10 
2010-12-03 10 

使用as_tibble()がtibbleに変換する:

あなたのデータを再作成。 preserve_row_names = TRUEは、xtsインデックスを文字クラスとして "row.names"という列を追加します。 renameおよびmutateは、日付のクリーンアップに使用されます。出力は、日付と値の組み合わせです。

> data_df <- data_xts %>% 
    as_tibble(preserve_row_names = TRUE) %>% 
    rename(date = row.names) %>% 
    mutate(date = as_date(date)) 
> data_df 
# A tibble: 4 × 2 
     date V1 
     <date> <dbl> 
1 2010-09-06 10 
2 2010-10-05 10 
3 2010-11-04 10 
4 2010-12-03 10 

あなたはさらに一歩進み、mutate機能を使用して、このような日、月、年などの他のフィールドを追加することができます。

> data_df %>% 
    mutate(day = day(date), 
      month = month(date), 
      year = year(date)) 
# A tibble: 4 × 5 
     date V1 day month year 
     <date> <dbl> <int> <dbl> <dbl> 
1 2010-09-06 10  6  9 2010 
2 2010-10-05 10  5 10 2010 
3 2010-11-04 10  4 11 2010 
4 2010-12-03 10  3 12 2010 
関連する問題