在R中的日期列中查找最后一个日期



我有一列开始和停止日期,我需要提取最新(最近(的停止日期来计算持续时间。(最早开始日期-最晚停止日期(不幸的是,最后一列中的日期不一定是最新的日期。所以,我必须逐行比较日期,找出最新的日期。另一个需要注意的是,并非所有列都有日期。

以下是日期列的示例:

pacman::p_load(tibble, lubridate)
start_1 <- as_tibble(sample(seq(ymd("1999/01/01"), ymd("2000/01/01"), by="day"), 5))
stop_1 <- as_tibble(sample(seq(ymd("2000/01/01"), ymd("2001/01/01"), by="day"), 5))
stop_2 <- as_tibble(c(ymd("2000/03/05"), ymd("2000/11/15"), ymd("2000/07/22"), ymd("2000/05/05"), NA))
stop_3 <- as_tibble(c(ymd("2000/12/12"), ymd("2000/02/09"), NA, NA, NA))
dat <- cbind(start_1, stop_1, stop_2, stop_3)

我真的不知道该怎么做,如果有任何帮助,我将不胜感激。

谢谢!

一个选项是使用apply((:

durs = as.Date(apply(dat[,c(2:ncol(dat))],1,max,na.rm=T))-dat[,1]

这假设第一列包含开始日期,之后所有列都包含可能的停止日期。

首先修复列名,然后将rowwise()c_across()一起使用。

colnames(dat) = c("start_1", "stop_1", "stop_2", "stop_3")
dat %>% 
rowwise() %>%
mutate(LastDate=max(c_across(starts_with("stop")), na.rm=T),
Duration = LastDate-start_1)

start_1    stop_1     stop_2     stop_3     LastDate   Duration
<date>     <date>     <date>     <date>     <date>     <drtn>  
1 1999-10-20 2000-11-12 2000-03-05 2000-12-12 2000-12-12 419 days
2 1999-04-30 2000-05-05 2000-11-15 2000-02-09 2000-11-15 565 days
3 1999-05-01 2000-04-01 2000-07-22 NA         2000-07-22 448 days
4 1999-04-17 2000-08-23 2000-05-05 NA         2000-08-23 494 days
5 1999-04-10 2000-04-02 NA         NA         2000-04-02 358 days

相关内容

  • 没有找到相关文章

最新更新