在之前的日期+ 7天之前替换NA

时间:2019-04-16 04:58:57

标签: r datetime dplyr

实际上,我已经将数据转换为类似的

code  name  returns  year  week
1     A     0.66     2000  01 
2     A     0.32     2000  02
3     A     0.66     2000  03
4     A     0.99     2000  04
5     A     0.55     2000  05

到看起来像这样的数据框

code  name  returns  date
1     A     0.66     07-01-2000
2     A     0.32     14-01-2000
3     A     0.66     21-01-2000
4     A     0.99     NA
5     A     0.55     05-02-2000

这是通过以下命令完成的

setDT(weekly)[,date:=as.Date(paste(year, week, 5, sep="-"), "%Y-%U-%u")]

但是,我不知道为什么上周,也就是第52周...最后一个日期丢失了。

我要用之前的日期+ 7天替换不适用。

输出应该看起来像这样

code  name  returns  date
1     A     0.66     07-01-2000
2     A     0.32     14-01-2000
3     A     0.66     21-01-2000
4     A     0.99     28-01-2000
5     A     0.55     05-02-2000


**Note- Here, year 2000 is just an example. Actually, NA occurs whenever month changes from Thursday.** 

1 个答案:

答案 0 :(得分:1)

如果您总是在最后一个日期前加上7天,则可以尝试执行以下操作:

library(tidyverse)
library(lubridate)

df %>% 
  mutate(new = as.Date.numeric(ifelse(is.na(date) == TRUE, lag(date) + days(7), date), 
                               origin =  "1970-01-01" ))

输出:

  code name returns       date        new
1    1    A    0.66 2020-01-07 2020-01-07
2    2    A    0.32 2020-01-14 2020-01-14
3    3    A    0.66 2020-01-21 2020-01-21
4    4    A    0.99       <NA> 2020-01-28
5    5    A    0.55 2020-02-05 2020-02-05

样本数据:

df <- read.table(text = "code  name  returns  date
1     A     0.66     07-01-2000
           2     A     0.32     14-01-2000
           3     A     0.66     21-01-2000
           4     A     0.99     NA
           5     A     0.55     05-02-2000
           ", header = TRUE) %>% 
  mutate(date = as.Date.character(date, tryFormats = c("%d-%m-%y")))