如何在R中使用缩放函数进行精确的回溯期?

5

我希望对一些数据进行缩放和居中,我知道如何进行缩放:

(scale(data.test[,1],center=TRUE,scale=TRUE))

我有365个观察值(一年),并希望为20天的回溯期缩放和居中我的数据。例如,我想这么做:“规范化为20天的回溯期”意味着我只需使用前20天的值来缩放我的第一个值 01/01/2014 (dd/mm/yy)。因此,使用11/12/13到31/12/13之间的值。对于02/01/14,从12/12/13到01/01/14进行缩放,依此类推。
规范化数据将是: =(数据-所有数据平均值)/所有数据标准差(见我的代码)
但是,因为我想“20天回溯期”意味着我只需要查看最近20个值,所以它将是 =(数据-前20个数据的平均值)/前20个数据的标准差
我想写一个循环,也许?因为我对R非常陌生,所以不知道如何在R中编写循环,甚至不知道是否有更好的方法实现我想要的效果...如果你能帮我解决这个问题就太好了。
1个回答

2

你想要一个20天的回溯期: lookback<-20 data.scale<-c() #创建 一个用于数据缩放的向量 for(i in lookback:nrow(data)){ mean<-mean(data[i-(lookback-1):i,1],na.rm=T) sd<-sd(data[i-(lookback-1):i,1],na.rm=T)*sqrt(((lookback-1))/lookback) data.scale<-c(data.scale,(data[i,1]-mean)/sd) }

对于第20行,您想使用从第1天到第20天的数据进行归一化处理,第21天使用从第2天到第21天的数据,以此类推...


1
谢谢你的回答,但很抱歉,我表达得不太好,因为我的母语不是英语... 我编辑了我的帖子,希望你能更好地理解我的意思。 - Coralie maire
是的,除此之外,我想要对第21行进行标准化处理,使用第1到20天的数据进行标准化,第22天使用第2到21天的数据进行标准化,以此类推... 这样写是否正确: for(i in 20:nrow(data)){ mean<-mean(data[i-20:i,1],na.rm=T) sd<-sd(data[i-20:i,1],na.rm=T)*sqr((20)/21) data.scale<-c(data.scale,(data[i,1]-mean)/sd) } ???? 此外,我遇到了一个错误:"object 'data.scale' not found"。谢谢您的帮助,能否在您的帖子中编辑一些代码解释呢?如果我理解您在做什么,下次我也可以自己做了 :) 谢谢 - Coralie maire
在循环之前,您必须创建一个数据框:data.scale <- c() - Christophe D.
现在我遇到了这个错误...:data.test[i, 1] - mean的错误:二元运算符的非数字参数。 - Coralie maire
请注意你的代码第一行缺少一个“)” ,还有一个“t”应该改成“sqrt”,我运行了你修改后的代码(做了以上两个修正),现在它可以工作了,而且我得到了346个值!!!谢谢! - Coralie maire
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接