【发布时间】:2021-01-11 11:19:11
【问题描述】:
我是 R 新手,我面临一些初学者问题:
我有向量 ts,它是货币对的每日比率。我现在想计算 z 归一化(?)。 R 中的函数看起来像这样:
znorm <- function(ts){
ts.mean <- mean(ts)
ts.dev <- sd(ts)
(ts - ts.mean)/ts.dev
}
我可以用它来得到这样的向量:
tsResult <- znorm(ts)
这是我真正不明白的第一件事:该函数似乎没有返回任何内容,而是通过一次操作给定的 ts 创建了一个新向量。如果有人可以额外解释这一点或向我指出很棒的资源。
无论如何,我的主要问题如下:返回的结果包含一些前瞻偏差,所以我创建了自己的 zNorm 函数(它返回一个二维数据框),带有一个窗口参数:
znormNew <- function(ts, window) {
i = as.integer(0)
df = data.frame(Count=integer(), RatioN=double())
for(val in ts)
{
ratioN = as.integer(0)
i = i + 1
if(i >= window) {
tsnew = ts[(i-window + 1):i]
mean <- mean(tsnew)
dev <- sd(tsnew)
ratioN = (tail(tsnew, n=1) - mean)/dev
#print(ratioN)
}
#print(cat(i , " -- " , ratioN))
df[nrow(df) + 1,] = c(i, ratioN)
}
return (df)
}
我费了很大劲才解决这个问题,但我认为从逻辑的角度来看这是正确的。
但我认为这可以通过一些更深入的 R 知识来简化很多。我尝试将 mutate 与 row_number 函数一起使用以使其成为单行,但这不起作用,因为 mutate 中的 row_number 似乎是一个向量(而不是我假设相应的单个 row_number 行是一个索引)。
【问题讨论】:
标签: r