带日期和滞后的动态If_else语句:If_else在R中不起作用

a_js12

我的数据有一个StartDate列,其中包括观察开始研究某部分的日期,即患者A在2014年1月1日开始治疗1,在2014年6月1日开始治疗2。

导致(滞后)新处理日期的行为空白。我想使用if_else语句用滞后的日期填充空白单元格。在下面的示例中,“ StartDate”列是我当前拥有的内容,“ NewDate”列是我想要结束的内容。单元格“”是我要用滞后日期填充的空白或NULL单元格。

我之所以选择使用lag函数,是因为我认为单元格会相互链接,即单元格3将复制单元格2,而单元格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)
艾伦·卡梅伦

我认为您只是在寻找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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章