目前,我有一个名为xts
的{{1}}时间序列,其中包含Data
和两个值列Date
和Value1
两个数字。我希望从我的代码中获得一个数字作为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)。
答案 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)