5

結果のデータが元の要約である形式で、時系列データをデータフレームに強制する簡単な方法は何ですか?

これは、xts または Zoo オブジェクトに格納されたデータの例です。

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 形式の目的に合っているかどうかもわかりませんでした。これは常に年情報を保持しているようです。

4

2 に答える 2

7

使用するデータのサンプルを提供してください。一般的ではない回答を提供するように努めます。基本的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)
于 2010-12-06T17:03:44.030 に答える
1

これは、データ フレームを xts オブジェクトに強制し、xts オブジェクトをティブル (「きちんとした」データ フレーム) に強制するためのtidyquant関数を含むパッケージを使用したソリューションです。as_xts()as_tibble()

データの再作成:

> 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」という列を追加します。Arenameおよびmutateは、日付のクリーンアップに使用されます。出力は、日付と値を含む tibble です。

> 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
于 2017-03-02T20:07:55.147 に答える