1

重複の可能性:
plyrを使用してグループ全体の前年比の変化を計算するための初心者向けのヒント

複数の変数グループ(つまり、地域と食品)にわたる既存のデータフレーム変数(つまり、売上高)の前年比(新しい変数)を計算するための良い方法は何ですか?

以下は、データフレーム構造の例です。

Date              Region    Type    Sales

1/1/2001    East    Food    120
1/1/2001    West    Housing 130
1/1/2001    North   Food    130
1/2/2001    East    Food    133
1/3/2001    West    Housing 140
1/4/2001    North   Food    150
….
….
1/29/2013   East    Food    125
1/29/2013   West    Housing 137
1/29/2013   North   Food    1350

また、データの違いに加えて、トレーリング(たとえば7日)の移動平均を計算したいと思います。

任意のガイダンスをいただければ幸いです。

4

1 に答える 1

3

ここにあなたが始めるための何かがあります。data.tableは、この種のものに簡潔で使いやすい構文を提供するため(学習曲線を過ぎたら)、この種のものに最適なパッケージです。

library(data.table)

再現可能な例を作成する

set.seed(128)
regions = c("East", "West", "North", "South")
types = c("Food", "Housing")
dates <- seq(as.Date('2009-01-01'), as.Date('2011-12-31'), by = 1)
n <- length(dates)
dt <- data.table(Date = dates, 
                 Region = sample(regions, n, replace = TRUE),
                 Type = sample(types, n, replace = TRUE),
                 Sales = round(rnorm(n, mean = 100, sd = 10)))

年の列を追加

dt[, Year := year(Date)]

> dt
        Date Region    Type Sales Year
1: 2009-01-01   West    Food   119 2009
2: 2009-01-02  North Housing   102 2009
3: 2009-01-03  North Housing   102 2009
4: 2009-01-04  North    Food   101 2009
5: 2009-01-05   West    Food   101 2009
---                                     
1091: 2011-12-27   East Housing   122 2011
1092: 2011-12-28   East Housing    88 2011
1093: 2011-12-29  North    Food   115 2011
1094: 2011-12-30   West Housing    96 2011
1095: 2011-12-31   East    Food   101 2011

年ごとの要約を計算する

summary <- dt[, list(Sales = sum(Sales)), by = 'Year,Region,Type']
setkey(summary, 'Year')

> head(summary)
Year Region    Type Sales
1: 2009   West    Food  4791
2: 2009  North Housing  3517
3: 2009  North    Food  6774
4: 2009  South Housing  4380
5: 2009   East    Food  4144
6: 2009   West Housing  4275

地域/製品の組み合わせごとに前年比の差分を作成する機能。

YoYdiff <- function(dt) {
  # Calculate year-on-year difference for Sales column
  data.table(Sales.Diff = diff(dt$Sales), Year = dt$Year[-1])
}

列ごとの前年比を計算します。これは私の例では機能します。setkey(dt、Year)はデータテーブルを年で並べ替えますが、一部の製品/地域で例が数年欠落している場合は、さらに注意する必要があります。

> summary[, YoYdiff(.SD), by = 'Region,Type']
    Region    Type Sales.Diff Year
 1:   West    Food       -412 2010
 2:   West    Food        121 2011
 3:  North Housing       1907 2010
 4:  North Housing      -1457 2011
 5:  North    Food      -3087 2010
 6:  North    Food        369 2011
 7:  South Housing       -539 2010
 8:  South Housing        575 2011
 9:   East    Food       1264 2010
10:   East    Food      -1732 2011
11:   West Housing        298 2010
12:   West Housing       -410 2011
13:  South    Food       -889 2010
14:  South    Food       1045 2011
15:   East Housing       1146 2010
16:   East Housing       1169 2011
于 2013-01-29T22:57:47.340 に答える