1

我手头有个问题。

目标:我有一个由“零”和“NA”组成的月度时间序列数据集。这里零是值,我希望它们被更改,而 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)

附上我提到的帖子:

  1. R仅在第一个非零值之后转换NA
  2. 在具有季节性周期的时间序列中插入缺失值

对此的任何帮助都会非常棒。

4

2 回答 2

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 作为输入,因此必须单独遍历列。(但从积极的方面来说,您也可以对不同的列使用不同的算法)

于 2016-05-14T02:40:59.683 回答
3

na.approx是“zoo”包中的一个有用功能。它将使用几种方法来近似数据集中的缺失值。搜索?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
于 2015-08-11T06:04:12.137 回答