【发布时间】:2017-07-31 18:45:55
【问题描述】:
假设我们有两个表:
预算表:
Item Budget
A 900
B 350
C 100
D 0
bDT = structure(list(Item = c("A", "B", "C", "D"), Budget = c(900L,
350L, 100L, 0L)), .Names = c("Item", "Budget"), row.names = c(NA,
-4L), class = "data.frame")
以及每个日期按项目的预期费用表。
Item Date Expense
A 2017-08-24 850
B 2017-08-18 300
B 2017-08-11 50
C 2017-08-18 50
C 2017-08-11 100
D 2017-08-01 500
expDF = structure(list(Item = c("A", "B", "B", "C", "C", "D"), Date = structure(c(17402,
17396, 17389, 17396, 17389, 17379), class = "Date"), Expense = c(850L,
300L, 50L, 50L, 100L, 500L)), .Names = c("Item", "Date", "Expense"
), row.names = c(NA, -6L), class = "data.frame")
我想总结一下我们每个日期每个项目可以花费的金额,如下所示:
Item Date Spend
A 8/24/2017 850
B 8/18/2017 300
B 8/11/2017 50
C 8/18/2017 50
C 8/11/2017 50
D 8/1/2017 0
【问题讨论】:
-
仅供参考,如果您使用
Date类列并提供易于重现示例的代码,对每个人来说都更好/更容易。请参阅stackoverflow.com/questions/5963269/… 以获得指导。 -
我看不出这与累积求和有什么关系。但我不明白结果是如何产生的逻辑。为什么
D0? -
@Gregor 这就像
Budget - cumsum(data.table::shift(Expense, type = "lead")),我猜,显示当前费用之前的预算金额。嗯,不,这也不太合适,因为两个 C 都是 50,好吧,我迷路了……也许那个,加上pmax或pmin某处。 -
@Gregor Spend 是每个日期每个项目可用的总预算(按降序排列)。因此,对于 D,“支出”为 0,因为我们没有“预算”。
-
那么
C 8/11/2017 50不应该等于0吗?