我首先通过使用 group-by 和 mutate 计算组内的 ID 来计算每月总和。但是,当我尝试使用 cumsum 按组计算每月累计总和时,数据看起来不正确。如果有人能帮助我,那将非常有帮助。谢谢~
假设原始数据框如下所示:
人员编号 | 公司 | yyyy | 月 |
---|---|---|---|
1 | A | 2011 | 一月 |
2 | A | 2011 | 一月 |
3 | A | 2011 | 二月 |
4 | A | 2011 | 二月 |
5 | A | 2011 | 二月 |
6 | A | 2011 | 三月 |
7 | B | 2011 | 一月 |
8 | B | 2011 | 一月 |
9 | B | 2011 | 一月 |
10 | B | 2011 | 二月 |
11 | B | 2011 | 二月 |
12 | B | 2011 | 二月 |
13 | B | 2011 | 二月 |
14 | B | 2011 | 三月 |
15 | B | 2011 | 三月 |
16 | B | 2011 | 四月 |
我想要一个最终输出数据框,如下所示。
人员编号 | 公司 | yyyy | 月 | 每月金额 | 每月累计金额 |
---|---|---|---|---|---|
1 | A | 2011 | 一月 | 2 | 2 |
2 | A | 2011 | 一月 | 2 | 2 |
3 | A | 2011 | 二月 | 3 | 5 |
4 | A | 2011 | 二月 | 3 | 5 |
5 | A | 2011 | 二月 | 3 | 5 |
6 | A | 2011 | 三月 | 1 | 6 |
7 | B | 2011 | 一月 | 3 | 3 |
8 | B | 2011 | 一月 | 3 | 3 |
9 | B | 2011 | 一月 | 3 | 3 |
10 | B | 2011 | 二月 | 4 | 7 |
11 | B | 2011 | 二月 | 4 | 7 |
12 | B | 2011 | 二月 | 4 | 7 |
13 | B | 2011 | 二月 | 4 | 7 |
14 | B | 2011 | 三月 | 2 | 9 |
15 | B | 2011 | 三月 | 2 | 9 |
16 | B | 2011 | 四月 | 1 | 10 |
library(dplyr, warn.conflicts = F)
df1 %>%
summarise(monthly_sum = n_distinct(person_id), .by = c(company, yyyy, month)) %>%
mutate(cumulative_sum = cumsum(monthly_sum), .by = company) %>%
right_join(df1, .)
#> Joining with `by = join_by(company, yyyy, month)`
#> person_id company yyyy month monthly_sum cumulative_sum
#> 1 1 A 2011 January 2 2
#> 2 2 A 2011 January 2 2
#> 3 3 A 2011 Feburary 3 5
#> 4 4 A 2011 Feburary 3 5
#> 5 5 A 2011 Feburary 3 5
#> 6 6 A 2011 March 1 6
#> 7 7 B 2011 January 3 3
#> 8 8 B 2011 January 3 3
#> 9 9 B 2011 January 3 3
#> 10 10 B 2011 Feburary 4 7
#> 11 11 B 2011 Feburary 4 7
#> 12 12 B 2011 Feburary 4 7
#> 13 13 B 2011 Feburary 4 7
#> 14 14 B 2011 March 2 9
#> 15 15 B 2011 March 2 9
#> 16 16 B 2011 April 1 10
read.table(text= "person_id company yyyy month
1 A 2011 January
2 A 2011 January
3 A 2011 Feburary
4 A 2011 Feburary
5 A 2011 Feburary
6 A 2011 March
7 B 2011 January
8 B 2011 January
9 B 2011 January
10 B 2011 Feburary
11 B 2011 Feburary
12 B 2011 Feburary
13 B 2011 Feburary
14 B 2011 March
15 B 2011 March
16 B 2011 April", header = T, stringsAsFactors = F) -> df1
创建于 2024-04-29,使用 reprex v2.0.2