R:将 NA 替换为 seq 日期

标签 r date conditional-statements na

我有一个这样的 df:

       Codigo  time       date
1       1001  8.77 2017-01-02
2       1001  8.96 2017-01-03
3       1001  9.56       <NA>
4       1001  7.81 2017-01-05
5       1001  0.00 2017-01-06
6       1001  9.58 2017-01-09
7       1001  9.64 2017-01-10
8       1001 12.11       <NA>
9       1005  6.86       <NA> 
10      1005  6.81 2017-05-04
11      1005  6.83 2017-05-05 
12      1005  6.86 2017-05-08
13      1005  6.90 2017-05-09
14      1005  6.42       <NA>

所有星期三均不适用。有多个不同的代码,每个代码可能有不同的顺序(即:工作人员 1001 可能在 2017 年 2 月 1 日开始,工作人员 1005 可能在 2017 年 3 月 5 日开始。

我想将此 NA 替换为逻辑日期。

我想知道,在下一个寄存器具有相同代码的情况下,该解决方案可以分配负 1 之前的日期,否则它可以分配日期加 1 之前的寄存器。没有任何代码包含单个注册。

提前致谢。

数据

df <- data.frame(
      Codigo = c(1001L, 1001L, 1001L, 1001L, 1001L, 1001L, 1001L, 1001L, 1005L,
                 1005L, 1005L, 1005L, 1005L, 1005L),
        time = c(8.77, 8.96, 9.56, 7.81, 0, 9.58, 9.64, 12.11, 6.86, 6.81,
                 6.83, 6.86, 6.9, 6.42),
        date = c("2017-01-02", "2017-01-03", NA, "2017-01-05", "2017-01-06",
                 "2017-01-09", "2017-01-10", NA, NA, "2017-05-04",
                 "2017-05-05", "2017-05-08", "2017-05-09", NA)
)

最佳答案

您可以通过上下移动观察序列并从中推断日期来估算缺失值

df %>% 
  group_by(Codigo) %>% 
  mutate(yesterday=lag(date),
         tomorrow=lead(date),
         date=case_when(
           is.na(date) & is.na(tomorrow) ~ yesterday + lubridate::days(1),
           is.na(date)                   ~ tomorrow - lubridate::days(1),
           TRUE ~ date)) %>%
  select(-yesterday, -tomorrow)

#> # A tibble: 14 x 3
#> # Groups:   Codigo [2]
#>    Codigo  time       date
#>     <int> <dbl>     <date>
#>  1   1001  8.77 2017-01-02
#>  2   1001  8.96 2017-01-03
#>  3   1001  9.56 2017-01-04
#>  4   1001  7.81 2017-01-05
#>  5   1001  0.00 2017-01-06
#>  6   1001  9.58 2017-01-09
#>  7   1001  9.64 2017-01-10
#>  8   1001 12.11 2017-01-11
#>  9   1005  6.86 2017-05-03
#> 10   1005  6.81 2017-05-04
#> 11   1005  6.83 2017-05-05
#> 12   1005  6.86 2017-05-08
#> 13   1005  6.90 2017-05-09
#> 14   1005  6.42 2017-05-10

关于R:将 NA 替换为 seq 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47981952/

相关文章:

r - 通过分组变量使具有唯一案例数的变量

r - 使用网格填充在 R 中绘制的贝塞尔曲线

javascript - 为 R DT 编写代码时出现问题,该 R DT 总结了具有可折叠子行的多项研究的结果

jquery - 表单日期输入字段格式

php - 检查字符串是否为日期的函数

javascript - 方法相同的BMI

css - 涉及自定义大小单位变量的纯 CSS if/else 语句

r - 在 R 中使用 All As OR As 和 Bs 为学生创建虚拟变量 (Tidyverse)

c# - 比较来自 Mysql 的 C# 中的两个日期

javascript - 基于嵌套函数条件的 'return true' 的最佳方法