【问题标题】:Replace missing values with the mean of surroundings values用环境值的平均值替换缺失值
【发布时间】:2013-09-07 21:27:34
【问题描述】:

我的数据集如下所示(我们称之为“a”):

date value
2013-01-01 12.2
2013-01-02 NA
2013-01-03 NA
2013-01-04 16.8
2013-01-05 10.1
2013-01-06 NA
2013-01-07 12.0

我想用最接近的环境值(系列中的前一个值和下一个值)的平均值替换 NA

我尝试了以下,但我不相信输出...

miss.val = which(is.na(a$value))
library(zoo)
z = zoo(a$value, a$date)
z.corr = na.approx(z)
z.corr[(miss.val - 1):(miss.val + 1), ]

【问题讨论】:

  • 您是否考虑过 Imputation?

标签: r time-series na zoo


【解决方案1】:

使用 zoo 包中的 na.locf(最后一次观察结转):

R> library("zoo")
R> x <- c(12.2, NA, NA, 16.8, 10.1, NA, 12.0)
R> (na.locf(x) + rev(na.locf(rev(x))))/2
[1] 12.20 14.50 14.50 16.80 10.10 11.05 12.00

(如果x 的第一个或最后一个元素是NA,则不起作用)

【讨论】:

  • 好的,但我想通过“a”数据集中的这些值来更改 NA。
  • @user2165907 你所要做的就是把他的最后一行重定向回来,即x &lt;- (na.locf(x) + rev(na.locf(rev(x))))/2
  • a$value
  • @rcs 我想知道 NA 的最后一个邻居值是否不是数字,我的意思是,它是一种类似于 NA 或异常值的字符,如何更改代码以查找周围值的平均值那么呢?
【解决方案2】:

您可以在 1 行代码中使用 imputeTS 包的移动平均 na.ma 函数完成此操作

library(imputeTS)
na_ma(yourData, k = 1)

这会将缺失值替换为最接近的环境值的平均值。 您甚至可以额外设置参数。

na_ma(yourData, k =2, weighting = "simple")

在这种情况下,算法将在每个方向上取接下来的 2 个值。您还可以选择不同的值权重(您可能希望值​​越接近影响越大)

【讨论】:

  • 谢谢,我不知道这个包!
猜你喜欢
  • 2018-02-05
  • 2012-05-03
  • 2018-12-27
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
相关资源
最近更新 更多