【发布时间】:2018-05-29 05:03:24
【问题描述】:
所以我有两张桌子:
Table1:
ID Yr Qty Cum_Qty
A 2013 3 3
A 2015 3 6
A 2016 2 8
B 2006 1 1
Table2:
ID Yr
A 2013
A 2014
A 2015
A 2016
A 2017
B 2016
B 2017
C 2016
C 2017
这就是我想要实现的 - 我想将 Cum_Qty 添加到表 2 并继承最新的 Cum_Qty(如果存在):
ID Yr Cum_Qty
A 2013 3
A 2014 3
A 2015 6
A 2016 8
A 2017 8
B 2016 1
B 2017 1
C 2016 0
C 2017 0
如果我目前执行left_join(table2, table1, by = c("ID", "Yr"),如果表 2 中缺少特定年份,我最终会在 Cum_Qty 中得到 NA 值。
我考虑过使用滞后功能,但这会让我在第一年的记录中留下 NA,并且不适用于表 1 中缺少的 ID C。
我想使用dplyr::mutate,所以我的代码保留在管道中。
我想我知道如何使用 3~4 个变异来做到这一点,但我想找到一种简化代码的方法。有人对我可以做什么有任何建议吗?
在 R 中创建表:
table_1 <- data.frame(
ID = c("A", "A", "A", "B"),
Yr = c(2013, 2015, 2016, 2006),
Qty = c(3, 3, 2, 1)) %>%
arrange(ID, Yr) %>%
group_by(ID) %>%
mutate(Cum_Qty = cumsum(Qty))
table_2 <- data.frame(
ID = c("A", "A", "A", "A", "A", "B", "B", "C", "C"),
Yr = c(2013, 2014, 2015, 2016, 2017, 2016, 2017, 2016, 2017))
【问题讨论】: