0

1つの日付列(実際にはDateクラス)と数値列(Numericクラス)を含むフレームがあります

       first       last       date number
1   Reynalda     Morley 1953-07-03      9
2     Annice     Meador 1954-10-29     38
3       Jude    Pertuit 1956-08-23     49
4    Viviana      Dance 1979-11-07     32
5    Lavonda      Babst 1982-02-06     17
6    Rachele Eisenhower 1985-11-12     27
7     Ericka     Roesch 1987-05-02     22
8   Giovanni      Bemis 1988-06-23     33
9      Ferne       Mone 2005-12-21     36
10 Anjanette   Eppinger 2010-01-03      4

私は毎年歩き回り、現在までの累積合計とその年の平均を取得したいと考えています。大まかに私は次のような結果フレームになりたいです:

    year    total.to.date   average.this.year
1   2001    128     32
2   2002    128     0
3   2003    145     17
4   2004    227     27.3333333333333
5   2005    267     20

各計算に一連のサブセット全体を使用できることは知っていますが、もっと賢くなれば...多分タップすることも知っていますか? ... 私はそれを大量生産することができました。このような日付を扱うためにライブラリを追加する必要がありますか?

4

1 に答える 1

1

機能で動作しbyます。

dat <- read.table(text="first       last       date number
1   Reynalda     Morley 1953-07-03      9
2     Annice     Meador 1954-10-29     38
3       Jude    Pertuit 1956-08-23     49
4    Viviana      Dance 1979-11-07     32
5    Lavonda      Babst 1982-02-06     17
6    Rachele Eisenhower 1985-11-12     27
7     Ericka     Roesch 1987-05-02     22
8   Giovanni      Bemis 1988-06-23     33
9      Ferne       Mone 2005-12-21     36
10 Anjanette   Eppinger 2010-01-03      4", header = TRUE)

dat$date <- as.Date(dat$date)

これらのコマンドはデータを生成します。累積合計は次のcumsum関数で計算されます。

result <- with(dat, by(number, format(date,"%Y"), function(x) c(mean(x),sum(x))))
result <- data.frame(names(result), do.call(rbind, result))
result <- setNames(cbind(result[-3], cumsum(result[3])),
                   c("year", "average.this.year", "total.to.date"))

result:_

   year average.this.year total.to.date
1  1953                 9             9
2  1954                38            47
3  1956                49            96
4  1979                32           128
5  1982                17           145
6  1985                27           172
7  1987                22           194
8  1988                33           227
9  2005                36           263
10 2010                 4           267
于 2012-11-29T20:37:26.180 に答える