带日期和滞后的动态 If_else 语句:If_else 在 R 中不起作用
Dynamic If_else statement w/ Dates and Lags: If_else Not Working in R
我的数据有一个 StartDate 列,其中包括观察开始某部分研究的日期,即患者 A 于 2014 年 1 月 1 日开始治疗 1,并于 2014 年 6 月 1 日开始治疗 2。
新治疗日期前(滞后)的行为空白。我想使用 if_else 语句用滞后日期填充空白单元格。在下面的示例中,'StartDate' 列是我当前拥有的,'NewDate' 列是我想要结束的。单元格“”是我希望用滞后日期填充的空白或 NULL 单元格。
我选择使用滞后函数是因为我认为单元格会相互链接,即单元格 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)
我认为您只是在寻找 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
我的数据有一个 StartDate 列,其中包括观察开始某部分研究的日期,即患者 A 于 2014 年 1 月 1 日开始治疗 1,并于 2014 年 6 月 1 日开始治疗 2。
新治疗日期前(滞后)的行为空白。我想使用 if_else 语句用滞后日期填充空白单元格。在下面的示例中,'StartDate' 列是我当前拥有的,'NewDate' 列是我想要结束的。单元格“”是我希望用滞后日期填充的空白或 NULL 单元格。
我选择使用滞后函数是因为我认为单元格会相互链接,即单元格 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)
我认为您只是在寻找 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