【发布时间】:2019-09-25 02:58:00
【问题描述】:
我有以下包含以下列的输入数据集:
-
OrderID:每个订单的唯一 ID -
ItemID:每个订单中每个商品的唯一 ID -
Amount:每件商品对应价格 -
ActualPayment:每个订单的实际付款。无论购买的商品数量如何,单个订单都可能有多次付款,因此Price和ActualPayment是多对多关系。单个ActualPayment可能会少付、多付或完全支付所请求的Amount。多余的ActualPayment会结转,部分支付则要靠下一次支付才能全额支付。
输入数据:
OrderID ItemID Amount ActualPayment
1 1 1 1000 500
2 1 2 1000 600
3 1 NA NA 800
4 2 1 2000 1000
5 2 2 2000 1000
6 2 NA NA 1000
7 2 NA NA 1000
8 3 1 500 600
9 3 2 300 200
根据输入数据,我想为每个 item 创建一个运行中的Balance,因为当有一个多余的。
-
ActualPaymentID:每个订单中每个ActualPayment的唯一性 -
Payable:Amount尚未付款 -
Payment:为每件商品支付的确切金额。例如,在第 2-3 行,ActualPayment == 600被拆分为ItemID1-2,因为 600 中的 500 正好覆盖了剩余的Payable。 -
Balance:每个ItemID的第一行始终是余数(即Amount - Payment)。以下条目应为-Payment
输出数据:
OrderID ItemID Amount ActualPayment ActualPaymentID Payable Payment Balance
1 1 1 1000 500 1 1000 500 500
2 1 1 1000 600 2 500 500 -500
3 1 2 1000 600 2 1000 100 900
4 1 2 1000 800 3 900 800 -800
5 2 1 2000 1000 1 2000 1000 1000
6 2 1 2000 1000 2 1000 1000 -1000
7 2 2 2000 1000 3 2000 1000 1000
8 2 2 2000 1000 4 1000 1000 -1000
9 3 1 500 600 1 500 500 0
10 3 2 300 600 1 300 100 200
11 3 2 300 200 2 200 200 -200
问题:
我主要纠结于如何创建Payment 列并在需要将ActualPayment 分成两部分时插入一行。我还需要将ItemID 和Amount 分散到Payments,这取决于付款的项目。
数据:
input <- data.frame(OrderID = c(rep(1, 3), rep(2, 4), rep(3, 2)),
ItemID = c(1, 2, NA, 1, 2, NA, NA, 1, 2),
Amount = c(1000, 1000, NA, 2000, 2000, NA, NA, 500, 300),
ActualPayment = c(500, 600, 800, 1000, 1000, 1000, 1000, 600, 200))
output <- data.frame(OrderID = c(rep(1, 4), rep(2, 4), rep(3, 3)),
ItemID = c(rep(1, 2), rep(2, 2), rep(1, 2), rep(2, 2), 1, 2, 2),
Amount = c(1000, 1000, 1000, 1000, 2000, 2000, 2000, 2000, 500, 300, 300),
ActualPayment = c(500, 600, 600, 800, 1000, 1000, 1000, 1000, 600, 600, 200),
ActualPaymentID = c(1, 2, 2, 3, 1, 2, 3, 4, 1, 1, 2),
Payable = c(1000, 500, 1000, 900, 2000, 1000, 2000, 1000, 500, 300, 200),
Payment = c(500, 500, 100, 800, 1000, 1000, 1000, 1000, 500, 100, 200),
Balance = c(500, -500, 900, -800, 1000, -1000, 1000, -1000, 0, 200, -200))
【问题讨论】:
标签: r