Dynami c If_else оператор с датами и задержками: If_else не работает в R - PullRequest
1 голос
/ 24 февраля 2020

Мои данные имеют столбец StartDate, который включает дату начала наблюдения определенной части исследования, ie пациент A начал лечение 1 1 января 2014 года и начал лечение 2, начиная с 1 июня 2014 года.

Строки, ведущие (отстающие) к новой дате обработки, остаются пустыми. Я хотел бы использовать оператор if_else для заполнения пустых ячеек с датой с задержкой. В приведенном ниже примере столбец «StartDate» - это то, что у меня сейчас есть, а столбец «NewDate» - это то, чем я хотел бы закончить. Ячейки "" - это пустые ячейки, или NULL, которые я хотел бы заполнить отложенной датой.

Я решил использовать функцию запаздывания, потому что думал, что ячейка будет цепляться друг от друга. ie Ячейка 3 скопирует ячейку 2, что скопирует ячейку 1.

Есть предложения? Спасибо

df<-data.frame(StartDate=c(as.Date('2014-01-01'),"","","","",as.Date('2014-06-01'),"","","","",""),
       NewDate=c(as.Date('2014-01-01'),as.Date('2014-01-01'),as.Date('2014-01-01'),as.Date('2014-01- 01'),as.Date('2014-01-01'),as.Date('2014-06-01'),as.Date('2014-06-01'),as.Date('2014-06- 01'),as.Date('2014-06-01'),as.Date('2014-06-01'),as.Date('2014-06-01')))
df$testDate<-if_else(is.na(df$Date),lag(df$Date),df$Date)

1 Ответ

5 голосов
/ 24 февраля 2020

Я думаю, вы просто ищете tidyr::fill, хотя кажется, что он не работает с датами, поэтому вам может потребоваться преобразовать в символ в качестве промежуточного шага:

library(tidyverse)

df %>% 
  mutate(chardate = as.character(StartDate)) %>% 
  fill(chardate) %>% 
  mutate(StartDate = as.Date(chardate)) %>% 
  select(-chardate)
#>     StartDate    NewDate
#> 1  2014-01-01 2014-01-01
#> 2  2014-01-01 2014-01-01
#> 3  2014-01-01 2014-01-01
#> 4  2014-01-01 2014-01-01
#> 5  2014-01-01 2014-01-01
#> 6  2014-06-01 2014-06-01
#> 7  2014-06-01 2014-06-01
#> 8  2014-06-01 2014-06-01
#> 9  2014-06-01 2014-06-01
#> 10 2014-06-01 2014-06-01
#> 11 2014-06-01 2014-06-01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...