如何解决如何将非零值分配给前零个值
我在R
中有关于人的发票和付款的信息:
dt <- data.frame(Date = seq.Date(as.Date("2020-01-01"),by = "month",length.out = 9),Invoice = c(9,9,10,10),Payment = c(0,25,13,20))
如您所见,有几个月,Payment = 0
。我想将非零付款分配给过去的零付款,如下所示:
Invoice_date Invoice_amount Payment_date Payment_amount
1 2020-01-01 9 2020-02-01 9 (The 2nd month payment assigned to 1st month)
2 2020-02-01 9 2020-03-01 9 (The 3rd month payment assigned to 2nd month)
3 2020-03-01 9 2020-06-01 9 (original payment - 25,the 6th month payment assigned to 3rd month)
4 2020-04-01 10 2020-06-01 10 (original payment - 25,the 6th month payment assigned to 4th month)
5 2020-05-01 10 2020-06-01 6 (original payment - 25,the 6th month payment assigned to 5th month)
6 2020-05-01 10 2020-07-01 10
7 2020-06-01 10 2020-08-01 10 (original payment - 13)
8 2020-07-01 10 2020-08-01 3 (original payment - 13)
9 2020-07-01 10 2020-09-01 7 (original payment - 20)
10 2020-08-01 10 2020-09-01 10 (original payment - 20)
11 2020-09-01 10 2020-09-01 3 (original payment - 20)
也许您知道做到这一点的最佳方法?
解决方法
如果您有先前的0
值需要用第一个非零值覆盖,那么这里是一个建议:
dt$Payment2 <- ifelse(dt$Payment == 0,NA_real_,dt$Payment)
dt$Payment2 <- zoo::na.locf(dt$Payment2,fromLast = TRUE)
dt
# Date Invoice Payment Payment2
# 1 2020-01-01 9 0 9
# 2 2020-02-01 9 9 9
# 3 2020-03-01 9 9 9
# 4 2020-04-01 10 0 25
# 5 2020-05-01 10 0 25
# 6 2020-06-01 10 25 25
# 7 2020-07-01 10 10 10
# 8 2020-08-01 10 13 13
# 9 2020-09-01 10 20 20
在tidyverse说中,这是
library(dplyr)
dt %>%
mutate
Payment2 = if_else(Payment == 0,Payment),Payment2 = zoo::na.locf(Payment2,fromLast = TRUE)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。