R - 通过时间和哪个子集XTS

时间:2014-05-27 15:21:54

标签: r date subset xts

目前,我有一个名为xts的{​​{1}}时间序列,其中包含Data和两个值列DateValue1两个数字。我希望从我的代码中获得一个数字作为Value2的平均值,该时间段是从Value1到此前14个数据点,此特定数据集中的周数的时间段内Value2 < mean(Value2)的平均值。

为了获得Value2 < mean(Value2)的日期,我编写了以下代码

Data[which(Data$Value2 < mean(Data$Value2)),"Date"]

但是,我不确定如何获得期间Value1的平均值,从上述代码的每个结果日期开始前14天。

示例数据集:

                Value1  Value2
1   2009-01-02  22.6500 17
2   2009-01-09  21.4700 56
3   2009-01-16  20.6100 -50
4   2009-01-23  19.6800 13
5   2009-01-30  19.2800 172
6   2009-02-06  20.1300 -120
7   2009-02-13  18.9900 17

Value2的平均值是12.57。因此,选择的日期将是2009-01-16和2009-02-06,因为Value2&lt;意味着(Value2)那里。然后我想在2009-01-16到2009-01-30以及从2009-02-06到2009-02-20的时间段内以Value1的平均值,以矩阵形式开始日期后跟均值(值1)。

1 个答案:

答案 0 :(得分:0)

我不确定这是否正是你所要求的。它将计算子集数据中Value1的平均值。但请注意,在未来还有不到14天的情况下,您不清楚自己想做什么。我包含两个版本的my.func定义,一个将在最终输出中生成NA,另一个不会。你可以自己检查一下。此外,如果我理解问题是正确的,则没有必要使用xts来执行此任务(因此我不会在我的示例中使用它)。

set.seed(99)
Data <- data.frame(Date = seq(as.Date("2000-01-01"), as.Date("2000-03-30"), by = 1), 
               Value1 = rnorm(90), 
               Value2 = runif(90))

strt <- which(Data$Value2 < mean(Data$Value2))

subData <- Data[which(Data$Value2 < mean(Data$Value2)),]

my.func <- function(x) mean(subData$Value1[x:(x+14)])       #will produce 14 NA

#my.func <- function(x) mean(subData$Value1[x:(x+14)], na.rm = TRUE)   #wont produce NA

sapply(seq_along(strt), my.func)