我正在尝试使用dplyr
和mutate
和lag
函数来基于另一个列和我正在创建的列中的先前值来创建燃尽图。
我看到了一个答案here,它要求相同的内容,但是OP自己使用循环来回答了这个问题。我希望在dplyr
中有更雄辩的解决方案。
样本(假设df有1000行):
df <- data.frame(SCHED_SHIP_DATE = c("2019-09-10","2019-09-11","2019-09-12","2019-09-13"), quantity = c(156,52,136,285), stringsAsFactors = FALSE)
start <- 4000
temp3 <- df %>%
arrange(SCHED_SHIP_DATE) %>%
mutate(burndown = ifelse(row_number() == 1, start, NA)) %>%
mutate(burndown = lag(burndown, default = burndown[1]) - quantity)
我得到以下输出({NA
是完成一行突变后的输出):
> temp3
SCHED_SHIP_DATE quantity burndown
1 2019-09-10 156 3844
2 2019-09-11 52 3948
3 2019-09-12 136 NA
4 2019-09-13 285 NA
当我期望这一点时:
> temp3
SCHED_SHIP_DATE quantity burndown
1 2019-09-10 156 3844
2 2019-09-11 52 3948
3 2019-09-12 136 3812
4 2019-09-13 285 3527
答案 0 :(得分:0)
我认为您想要的输出有点错误。这可能就是您需要的-
df %>%
arrange(SCHED_SHIP_DATE) %>%
mutate(
burndown = 4000 - cumsum(quantity)
# burndown = pmax(4000 - cumsum(quantity), 0) # use this if you don't want -ve burndown
)
SCHED_SHIP_DATE quantity burndown
1 2019-09-10 156 3844
2 2019-09-11 52 3792
3 2019-09-12 136 3656
4 2019-09-13 285 3371