7

これは複数の解決策があるやや単純な質問だと思いますが、私はまだRの初心者であり、徹底的な検索では、私がやりたいことをうまく説明する答えが得られませんでした.

より適切な用語がないため、データ フレーム内の変数の「移動合計」を作成しようとしています。これらは 3 年と 5 年の合計で、1 年遅れます。したがって、1986 年の観測の 5 年間の合計は、1981 年、1982 年、1983 年、1984 年、および 1985 年の以前のすべての観測の合計になります。x観測年の前 5 年間の合計。

country     year      x      x5yrsum
  A         1980      9        NA
  A         1981      3        NA
  A         1982      5        NA
  A         1983      6        NA
  A         1984      9        NA
  A         1985      7        32
  A         1986      9        30
  A         1987      4        36

  .....................

  B         1990      0        NA
  B         1991      4        NA
  B         1992      2        NA
  B         1993      6        NA
  B         1994      3        NA
  B         1995      7        15
  B         1996      0        22

アンバランスパネルデータです。適切だと思いddplyますが、正確なコーディングはわかりません。

任意の入力をいただければ幸いです。

4

3 に答える 3

9

filterin ddply(または「分割-適用-結合」アプローチを実装する他の関数)で使用できます。

library(plyr)
ddply(DF, .(country), transform, 
          x5yrsum2 = as.numeric(filter(x,c(0,rep(1,5)),sides=1)))

#    country year x x5yrsum x5yrsum2
# 1        A 1980 9      NA       NA
# 2        A 1981 3      NA       NA
# 3        A 1982 5      NA       NA
# 4        A 1983 6      NA       NA
# 5        A 1984 9      NA       NA
# 6        A 1985 7      32       32
# 7        A 1986 9      30       30
# 8        A 1987 4      36       36
# 9        B 1990 0      NA       NA
# 10       B 1991 4      NA       NA
# 11       B 1992 2      NA       NA
# 12       B 1993 6      NA       NA
# 13       B 1994 3      NA       NA
# 14       B 1995 7      15       15
# 15       B 1996 0      22       22
于 2013-07-10T14:32:01.250 に答える
3

DFが入力 3 列データ フレームの場合は、fromzoo で使用averollapplyrます。の幅を使用k+1し、合計から k+1 番目の要素を削除して、現在の値xが除外され、残りのk値のみが合計されることに注意してください。

library(zoo)

k <- 5
roll <- function(x) rollapplyr(x, k+1, function(x) sum(x[-k-1]), fill = NA)
transform(DF, xSyrsum = ave(x, country, FUN = roll))

これは次を与えます:

   country year x xSyrsum
1        A 1980 9      NA
2        A 1981 3      NA
3        A 1982 5      NA
4        A 1983 6      NA
5        A 1984 9      NA
6        A 1985 7      32
7        A 1986 9      30
8        A 1987 4      36
9        B 1990 0      NA
10       B 1991 4      NA
11       B 1992 2      NA
12       B 1993 6      NA
13       B 1994 3      NA
14       B 1995 7      15
15       B 1996 0      22
于 2013-07-10T14:52:26.977 に答える