Замена NA на предыдущую дату + 7 дней - PullRequest
1 голос
/ 16 апреля 2019

На самом деле, я преобразовал данные примерно так

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-й неделе ... последняя дата отсутствует.

Я хочу заменить NA предыдущей датой + 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 Ответ

1 голос
/ 16 апреля 2019

Если вы всегда добавляете 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")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...