R-在一周内平均数据,一周的数据为0到2个值

  • 本文关键字:一周 数据 2个值 r date
  • 更新时间 :
  • 英文 :


我有一个"每周" XTS对象。数据指的是期货(前期期货(。几周计算如下:

  1. 第1周在上一个日历月的最后一个工作日结束
  2. 第2周在当前日历月的第五个工作日结束
  3. 第3周在当前日历月的第10个工作日结束
  4. 第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"或类似。

最新更新