R中的分组和标准开发

R中的分组和标准开发,r,R,我有一个叫做dt的数据帧。看起来像这样 Year Sale 2009 6 2008 3 2007 4 2006 5 2005 12 2004 3 我有兴趣了解过去四年的销售情况。在这种情况下,没有四年的数据,如20062005年和2004年,我想得到NA。如何创建一个新列,其中的值对应于每年。新的数据看起来像 Year Sale std. 2009 6 std(05,06,07,08) 2008 3 std(07,06,05,04) 2007 4

我有一个叫做dt的数据帧。看起来像这样

Year Sale
2009  6
2008  3
2007  4
2006  5
2005  12
2004  3
我有兴趣了解过去四年的销售情况。在这种情况下,没有四年的数据,如20062005年和2004年,我想得到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}); 

dt您可以从package zoo使用
rollapply

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

[编辑]我使用了按年份排序的数据框。如果按原始顺序安装,可能需要使用align=“left”

这就是我解决问题的方法:

dt <- dt[order(dt$GVKEY,dt$FYEAR),]; 
  dt <- sqldf("select GVKEY, FYEAR, IBC from dt");
  dt$STDEARN <- ave(dt$IBC, dt$GVKEY,FUN = function(x) {if(length(x)>3) c(NA,head(runSD(x,4),-1)) else sample(NA,length(x),TRUE)});
dt