我有一个可以像这样生成的数据:
set.seed(1)
foo <- sample(1:10000,1000)
foo[c(1:100)] <- 1
在此之后得到zvalues,它是按比例计算的,我使用了:
boo<-rollapply(foo,50,scale)
但是所有boo的值似乎都是NAN。
背景信息:
z-score = scale = (x - mean)/ std deviation
我的第一个问题是为什么我获得所有值的NAN?对于前100个,我理解std dev是o。所以,我应该只为前几行获得Nan,但是我获得所有行的NAN。我不明白我错在哪里。
第二个问题是我的实际问题。
我想要一个包含50个元素的窗口,只获得窗口的第25个或中间元素的z分数。然后我需要对所有1000个数据点进行rollapply。
因此,对于其各自的50个窗口大小,输出将是从25到975的元素的z得分。如何使用rollapply和scale获得此结果?
答案 0 :(得分:2)
1) rollapply
期望FUN
返回标量或向量,而不是列矩阵。返回向量将消除不需要的NaN值:
rollapply(foo , 50, function(x) c(scale(x)))
结果将是951x50矩阵。
2)对于第二个问题,请尝试:
rollapply(foo, 50, function(x) (x[25] - mean(x)) / sd(x))
或者这个:
rollapply(foo, 50, function(x) scale(x)[25])
或者这个:
rollapply(foo, 50, function(x) c(scale(x)))[, 25]