【问题标题】:dealing with missing values with the R filter() function使用 R filter() 函数处理缺失值
【发布时间】:2011-10-29 14:06:35
【问题描述】:

我想使用 R 中的 filter() 函数处理缺失值。

事实上,我希望计算X_t = 1/(2*T+1) * sum(X_i, i = (t-T)...(t+T)),其中(X_t) 是包含缺失值的经典时间序列。 filter() 计算时间间隔 [(t-T);(t+T)] 上的 sums,但它没有给出除 NAs 之外的值的 mean

有人知道如何处理吗?

【问题讨论】:

  • 请向我们提供样本数据和您目前使用的代码。这样可以更轻松地回答您的问题。

标签: r filter


【解决方案1】:

试试这个:

library(zoo)
x <- 1:10
x[6] <- NA
rollapply(x, 3, mean, na.rm = TRUE)
## [1] 2.0 3.0 4.0 4.5 6.0 7.5 8.0 9.0

您可能需要也可能不需要各种其他参数,具体取决于您想要得到什么。见?rollapply

已修订已根据rollapply 的更新版本更新了答案,这允许简化。

【讨论】:

  • 非常感谢您的回答。这正是我想要的!
【解决方案2】:

sapply 技巧对我来说不太奏效。您必须操纵初始向量以使其与大于 1 的 Ks 一起工作。这是我的代码:

k <- 1  ## Moving average over three points.
x <- c(rep(1,5), NA, rep(1,5)) # input vector
stmp <- c( rep(NA,k), x, rep(NA,k) )
smooth <- sapply((k+1):(k+length(x)), function(i){mean(x[(i-k):(i+k)], na.rm=TRUE)})

我还添加了一个函数语句,因此代码运行时不会出错。 希望对你有帮助:)

【讨论】:

    【解决方案3】:

    如果您想要一个超过2k+1 点的简单移动平均线,您可以这样做:

    x <- c(rep(1,5), NA, rep(1,5))
    k <- 1  ## Moving average over three points.
    smooth <- sapply(1:length(x), mean(x[(i-k):(i+k)], na.rm=TRUE))
    

    在这种情况下,这会导致所有向量的向量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-23
      • 2022-11-24
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 2019-05-17
      相关资源
      最近更新 更多