如何解决使用滞后功能仅对丢失的日期递增地增加日期
在下面的示例中,我想使用前几天推导缺少的日期,而effort
变量中携带的整数值仅用于缺少的日期。
# Libraries
library("tidyverse")
library("lubridate")
work_start_date <- dmy("2/11/2020")
dta_tasks <- tribble(
~task_no,~task,~effort,1,"Task 1",NA,1.1,"Task 1.1",1.3,"Task 1.3",1.4,"Task 1.4",2,1.5,"Task 1.5","Task 2",2.1,"Task 2.1",2
)
dta_tasks %>%
arrange(task_no) %>%
mutate(start_date = if_else(row_number() == 1,work_start_date,NA_Date_),start_date = if_else(is.na(start_date),lag(start_date) + days(effort),start_date))
所需结果
task_no task effort start_date
<dbl> <chr> <dbl> <date>
1 1 Task 1 NA 2020-11-02
2 1.1 Task 1.1 1 2020-11-03
3 1.3 Task 1.3 1 2020-11-04
4 1.4 Task 1.4 2 2020-11-06
5 1.5 Task 1.5 1 2020-11-07
6 2 Task 2 NA 2020-11-08
7 2.1 Task 2.1 2 2020-11-08 # For NA it has to skip value
阐述
在下面的代码中,我想将Sys.Date()
替换为以前的计算日期。
dta_tasks %>%
arrange(task_no) %>%
mutate(
start_date = if_else(row_number() == 1,Sys.Date() + days(effort),start_date)
)
解决方法
尝试一下:
dta_tasks %>%
arrange(task_no) %>%
mutate(effort_no_na = pmax(effort,na.rm = TRUE)) %>%
mutate(cum_effort = cumsum(effort_no_na),start_date = work_start_date + days(effort_no_na),start_date = if_else(is.na(effort),NA_Date_,start_date)) %>%
fill(start_date,.direction = "up")
想法是使用cumsum
跟踪自开始以来的总工作量。由于NA的存在,所以要进行大量的簿记。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。