我的真实数据集是一个xts,具有4列x 110000行,具有信号输出值。我想做的是根据一些任意标准删除某些值。
以sample_matrix
中的xts
数据集为例,我的代码如下:
require(xts)
require(zoo)
data("sample_matrix")
myxts <- as.xts(sample_matrix)
for (colonne in 1:ncol(myxts)) {
for (i in 2:(nrow(myxts))) {
if (i < 11) {
j = i-1
k = 10
}else{
if (i > nrow(myxts)-10){
j = 10
k = nrow(myxts)-i
}else{
j = 10
k = 10
}
}
if (myxts[i,colonne] > mean(myxts[i-j:i+k,colonne])+5*sd(myxts[i-j:i+k,colonne])) {
myxts[i,colonne] <- NA
myxts<- na.approx(myxts)
}}}
我正在做的是删除任何优于20个相邻值的平均值+ 5倍标准偏差的数据。该代码可以运行,但是速度很慢,很可能没有进行优化。
2 if
是为了避免使用数据mean
计算sd
和subscript out of bond
。
我想使用rollmean
和rollapply
减少代码,但我不知道该怎么做。
到目前为止,我认为它应该是这样的:
for (i in 1:nrow(myxts)) {
if (myxts[i,] > rollmean(myxts[i,],k=20)+5*rollapply(myxts[i,],width = 20,FUN =sd)) {
myxts[i,] <- NA
myxts<- na.approx(myxts)
}}
但这会导致Error in rollapply.xts(x, k, FUN = (mean), fill = fill, align = align, :
width <= nr is not TRUE
我不知道如何制作rollmean
“跟随” i
。
欢迎任何帮助!