我手头有问题。
目标:我有一个月度时间序列数据集,包括“零”和“NAs”。这里的零是值,我希望它们被更改,而NA是我想要在R中使用StructTS来估算的缺失值。
数据集示例
dataset <- matrix(sample(c(NA, 1:5), 25, replace = TRUE), 5)
dataset[1,2]<-0
dataset[4,4] <- 0
在数据集中,我只想用一个值替换NA,让零只为零。
在研究和阅读几个博客后,我使用了以下方法:
missvalue <- function(df){
x<-df
x <- ts(rev(x),f=12)
fit <- ts(rowSums(tsSmooth(StructTS(x))[,-2]))
tsp(fit) <- tsp(x)
return(list(N=fit))
}
Newdata<-lapply(m,missvalue)
我也试过一种卑鄙的技巧:
##Missing Value another treatment
nzmean <- function(x) {
if (all(x==0)) 0 else mean(x[x!=0])
}
apply(m,1,nzmean)
附上我提到的帖子:
答案 0 :(得分:3)
na.approx
是一个有用的功能来自动物园&#39;动物园。它将使用几种方法来近似数据集中的缺失值。搜索?na.approx
以获取有关参数选项和应用程序的更多信息。它将专注于NA
条目,并且不会触及零。希望有所帮助。
library(zoo)
na.approx(dataset)
[,1] [,2] [,3] [,4] [,5]
[1,] 1.0 0 4 1 1
[2,] 5.0 1 3 5 1
[3,] 3.0 2 4 2 1
[4,] 3.5 2 2 0 1
[5,] 4.0 5 2 4 1
数据强>
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 4 1 1
[2,] 5 1 3 5 NA
[3,] 3 2 4 2 NA
[4,] NA 2 2 0 1
[5,] 4 5 2 4 1
答案 1 :(得分:3)
我可以在这里推荐imputeTS包(我是维护者)。让这项任务变得非常轻松。 (https://cran.r-project.org/web/packages/imputeTS/index.html)
提供多种算法,如均值插值,中位数,线性插值,样条插值,卡尔曼平滑,......
这里有一个例子:
library(imputeTS)
dataset[ ,1] <- na.kalman(dataset[ ,1])
另一个:
dataset[ ,1] <- na.interpolation(dataset[ ,1])
另一个:
dataset[ ,1] <- na.mean(dataset[ ,1])
另一个:
dataset[ ,1] <- na.locf(dataset[ ,1])
唯一的缺点是,软件包不允许将data.frame作为输入,因此必须单独循环遍历列。 (但从积极的方面来说,你也可以为不同的列使用不同的算法)