-2

dt というデータ フレームがあります。dtはこんな感じ。

Year Sale
2009  6
2008  3
2007  4
2006  5
2005  12
2004  3

過去 4 年間の売上の std.dev を取得することに関心があります。2006、2005、2004 のように 4 年のデータがない場合は、NA を取得したいと考えています。各年に対応する値で新しい列を作成するにはどうすればよいですか。新しいデータは次のようになります。

 Year Sale  std.
2009  6     std(05,06,07,08)
2008  3     std(07,06,05,04)
2007  4     NA
2006  5     NA
2005  12    NA
2004  3     NA

私はこれをたくさん試しましたが、私はRの初心者であるため、できませんでした。誰か助けてください。ありがとう。

編集:GVKEYを使用したデータは次のとおりです。

    GVKEY FYEAR    IBC
 1  1004  2003  3.504
 2  1004  2004 18.572
 3  1004  2005 35.163
 4  1004  2006 59.447
 5  1004  2007 75.745

よろしく

編集:

前述の関数 rollapply 関数を次のように使用しています。

dt <- ddply(dt, .(GVKEY), function(x){x$ww <- rollapply(x$Sale,4,sd, fill =NA, align="right"); x}); 

しかし、次のエラーが発生します。 Error in seq.default(start.at, NROW(data), by = by) : wrong sign in 'by' argument

私が間違っているのかわかりません。GVKEY を含むデータは上部に記載されています。

4

2 に答える 2

2

rollapplyパッケージzooから使用できます:

require(zoo)
rollapply(df$Sale, 4, sd, fill=NA, align="right")

[編集] 年ごとに並べ替えられたデータ フレームを使用しました。元の順序である場合は、おそらく align="left" を使用する必要があります

于 2013-11-13T19:09:07.933 に答える