我是一个新手,对plyr(和R)一无所知,需要帮助入门。以棒球数据集为例,如何计算按联盟和队伍(lg和team)的年度“打数”变化(yoy)?
library(plyr)
df1 <- aggregate(ab~year+lg+team, FUN=sum, data=baseball)
对数据框进行了一些聚合以简化数据,数据现在如下所示:
head(df1)
year lg team ab
1884 UA ALT 108
1997 AL ANA 1703
1998 AL ANA 1502
1999 AL ANA 660
2000 AL ANA 85
2001 AL ANA 219
我希望您最终能得到这样的结果。
year lg team ab yoy
1997 AL ANA 1703 NA
1998 AL ANA 1502 -201
1999 AL ANA 660 -842
2000 AL ANA 85 -575
2001 AL ANA 219 134
我开始编写以下函数,但我认为它是错误的:
yoy.func <- function(df) {
lag <- c(df$ab[-1],0)
cur <- c(df$ab[1],0)
df$yoy <- cur -lag
return(df)
}
尝试无果后,我使用以下代码来尝试返回年同比变化率。
df2 <- ddply(df1, .(lg, team), yoy.func)
任何指导将不胜感激。
谢谢。
lag
将等于nrow(df)
,而cur
将等于nrow(df) + 1
。如果你只是减去df$ab - lag
,那么你就可以解决问题了。(唯一缺少的部分是确认你是否有连续的年份。)我还会看看zoo
包中的rollapply
。 - Justin