我有一个非常简单的问题,但奇怪的是,这使我花费的时间比我想象的要长。我在这里将其通用,最后给出一个示例。我希望清楚一点:
我有一个数字向量X1
,有N个观测值。我需要基于向量X2
的最小值创建另一个向量X1
。
但是条件有点奇怪:向量X2
的每个观测值必须是向量X1
在相同位置的最后126个观测值的最小值。
换句话说,向量i
的每个观察值X2
是向量(i-125):i
的{{1}}之间最小值的结果。
我已经尝试了很多方法,例如用于创建函数,使用Apply,使用索引,但是没有用。
考虑示例:
X1
和警告消息:
set.seed(1)
x1<-rnorm(500,2,3)
i<-seq(126,length(x1))
x2<-min(x1[(i-125):i])
或
Warning messages:
1: In (i - 125):i :
numerical expression has 375 elements: only the first used
在这种情况下,只有最后一个观测值(500)不会产生for(j in 126:length(x1)){
x2<-rep(NA,length(x1))
x2[j]<-(min(x1[j-125:j]))
}
。
答案 0 :(得分:1)
for循环应具有与尝试提示警告的括号相同的括号(并且不应在for循环内初始化矢量,因为这样会擦除先前的值。):
x2<-rep(NA,length(x1))
for(j in 126:length(x1)){
x2[j]<-(min(x1[(j-125):j]))
}