我有一个"每周" XTS对象。数据指的是期货(前期期货(。几周计算如下:
- 第1周在上一个日历月的最后一个工作日结束
- 第2周在当前日历月的第五个工作日结束
- 第3周在当前日历月的第10个工作日结束
- 第4周在近合同到期的那一天结束
数据如下(例如数据的一部分(:
2005-09-30 0.0019094400
2005-10-07 0.0020219110
2005-10-14 0.0067063990
2005-10-20 0.0074893360
2005-10-31 0.0028761630
2005-11-07 0.0011331470
2005-11-14 0.0031749880
2005-11-18 0.0007342980
2005-11-30 0.0025730810
2005-12-07 -0.0003133450
2005-12-14 -0.0008288860
2005-12-20 0.0013468400
2005-12-30 0.0012742930
2006-01-09 -0.0007873670
2006-01-17 -0.0004193150
2006-01-20 -0.0005391370
2006-01-31 -0.0022229660
如果我在数据集中调用"字符串",我会得到以下内容(您可以在此处忽略x,重要数据是日期和风险。
'data.frame': 484 obs. of 3 variables:
$ Date : num NA NA NA NA NA NA NA NA NA NA ...
$ Risk.Premium: num 0.00191 0.00202 0.00671 0.00749 0.00288 ...
$ X : logi NA NA NA NA NA NA ...
您可以看到,数据中有一个星期的0到2个值。我想将数据转换为"适当"的每周数据,因此我可以将其与其他每周数据进行比较(即,如果一个星期有2个值,则为平均值,如果一周的值为零,则本周删除(。有人知道该怎么做吗?
创建示例数据:
mydf <- data.frame(
date = c("2005-09-30", "2005-10-07", "2005-10-08", "2005-11-12"),
value = c(1, 2, 3, 4))
然后创建一个函数,该函数在一周内找到平均值。如果给出没有任何值的一周,它将返回NAN。
weekAverage <- function(week) {
vals <- mydf[which(format(as.Date(mydf$date), "%W") == week), 2]
mean(vals)
}
然后将功能应用于数据框中的每个唯一周。
weeks <- unique(format(as.Date(mydf$date), "%W"))
weeklyAverages <- data.frame(
Week = weeks,
Average = sapply(weeks, weekAverage))
weeklyAverages
## Week Average
##39 39 1.0
##40 40 2.5
##45 45 4.0
如果您的所有几周都在同一年之内,这起作用,因为这仅在一年中的一周而不是一年中的因素。如果要包括年份,则可以将格式字符串更改为 "%W %Y"
或类似。