我有一些每日时间序列数据,我需要提取相对于周均值的'周日百分比'。例如,如果第一周有mean = 100
且本周的 Sunday 值为20,则星期日变为0.2。
以下是一些随机数据:
set.seed(0)
y = rnorm(1705)
date = seq(as.Date('2008-01-01'), by = 'day', length = length(y))
data.df = data.frame(y, date)
我需要一个名为pecent
的新列,这是上面解释的值。我试着添加一些
列然后使用tapply
,但失败了。感谢任何帮助!
答案 0 :(得分:3)
首先使用week
创建format
变量。然后使用ddply
和transform
。
library(plyr)
data.df$week <- format(data.df$date,'%W %Y') #week begins with Monday
data.df <- ddply(data.df,~week,transform,percent=y/mean(y))
head(data.df)
y date week percent
1 1.2629543 2008-01-01 00 2008 3.1395415
2 -0.3262334 2008-01-02 00 2008 -0.8109741
3 1.3297993 2008-01-03 00 2008 3.3057095
4 1.2724293 2008-01-04 00 2008 3.1630952
5 0.4146414 2008-01-05 00 2008 1.0307451
6 -1.5399500 2008-01-06 00 2008 -3.8281172
请注意,第00周通常不是一周的最后一周。如果重要的话,合并后续几年的最后一周和第一周。