【问题标题】:How to replace missing with previous missing with in 7 days如何在 7 天内用以前的缺失替换缺失
【发布时间】:2017-07-04 08:43:59
【问题描述】:

您好,我的 df 如下,哪个值列具有 NA 值 如何用过去 7 天的 NA 值替换以前的值。如果在过去 7 天内未找到非 NA 值,则无法替换例如:在过去 7 天内没有 10-01-2016 的值

 Name   value   new_col
01-01-2016  NA     *NA*
02-01-2016  43
03-01-2016  NA     *43*
04-01-2016  NA     *43*
05-01-2016  NA     *43*
06-01-2016  NA     *43*
07-01-2016  NA     *43*
08-01-2016  NA     *43*
09-01-2016  NA     *43*
10-01-2016  NA     *NA*
11-01-2016  12
12-01-2016  33
13-01-2016  NA     *33*
14-01-2016  NA     *33*

我们可以使用 ZOO lib 填充 NA 以前的值

df

df$new_col = ifelse(is.na(df$value) & (df$Name-7), na.locf(df$value), df$value)

【问题讨论】:

  • df$new_col = ifelse(is.na(df$value) & (df$Name-7), na.locf(df$value), df$value)
  • 我也试过上面的代码,但没有找到合适的答案

标签: r


【解决方案1】:

您可以使用来自zoo 包的na.locf,带有参数maxgap:

(请注意,我们假设您的数据是按日期排列的,没有漏掉系列中的漏洞)

library(zoo)
df$new_col <- na.locf(df$value, maxgap = 7, na.rm = FALSE)

【讨论】:

  • 感谢 jlesuffleur,得到“替换错误有 13 行,数据有 14 行”以及如果日期重复怎么办
  • 抱歉,您必须将 na.rm 设置为 FALSE
  • 很好,我不知道这个论点maxgap!
  • 太棒了,如果日期重复并且我尝试使用 maxgap = as.numeric(as.POSIXct(df$Name-7)
猜你喜欢
  • 2013-01-17
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 2021-09-24
相关资源
最近更新 更多