R中的分组和标准开发
我有一个叫做dt的数据帧。看起来像这样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
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