r - 计算R中多列的累积和
问题描述
R newb,我正在尝试计算按年、月、组和子组分组的累积总和,也有多个列要计算。
数据样本:
df <- data.frame("Year"=2020,
"Month"=c("Jan","Jan","Jan","Jan","Feb","Feb","Feb","Feb"),
"Group"=c("A","A","A","B","A","B","B","B"),
"SubGroup"=c("a","a","b","b","a","b","a","b"),
"V1"=c(10,10,20,20,50,50,10,10),
"V2"=c(0,1,2,2,0,5,1,1))
Year Month Group SubGroup V1 V2
1 2020 Jan A a 10 0
2 2020 Jan A a 10 1
3 2020 Jan A b 20 2
4 2020 Jan B b 20 2
5 2020 Feb A a 50 0
6 2020 Feb B b 50 5
7 2020 Feb B a 10 1
8 2020 Feb B b 10 1
想要的结果表:
Year Month Group SubGroup V1 V2
1 2020 Jan A a 20 1
2 2020 Feb A a 70 1
3 2020 Jan A b 20 2
4 2020 Feb A b 20 2
5 2020 Jan B a 0 0
6 2020 Feb B a 10 1
7 2020 Jan B b 20 2
8 2020 Feb B b 80 8
从样本表中,在 2020 年 1 月,“A”组子组“a”的总和为 10+10 = 20... 在 2020 年 2 月,该值为 50,因此从 1 月开始为 20 + 50 = 70,依此类推。 ..
如果没有值,则应考虑为 0。
我尝试了一些代码,但没有一个甚至没有接近我需要的输出。如果有人能帮助我解决这个问题,我将不胜感激。
解决方案
这是一个简单的group_by/mutate
问题。列V1, V2
被选择across
并cumsum
应用于它们。
df$Month <- factor(df$Month, levels = c("Jan", "Feb"))
df %>%
group_by(Year, Group, SubGroup) %>%
mutate(across(V1:V2, ~cumsum(.x))) %>%
ungroup() %>%
arrange(Year, Group, SubGroup, Month)
## A tibble: 8 x 6
# Year Month Group SubGroup V1 V2
# <chr> <fct> <chr> <chr> <dbl> <dbl>
#1 2020 Jan A a 10 0
#2 2020 Jan A a 20 1
#3 2020 Feb A a 70 1
#4 2020 Jan A b 20 2
#5 2020 Feb B a 10 1
#6 2020 Jan B b 20 2
#7 2020 Feb B b 70 7
#8 2020 Feb B b 80 8
推荐阅读
- python - 洗牌范围迭代器
- keycloak - 在 keycloak 登录页面上显示应用程序名称
- heroku - 在heroku,环境变量会因为某种原因而改变吗?
- sqlite - IdentityServer4 SQLite 错误 1:“没有这样的表:AspNetUserLogins”
- git - 在 Windows 10 上签署 git commit 时出现“gpg:警告:homedir 上的不安全权限”
- php - 如何捕获生成器抛出的异常并恢复迭代?
- regex - 使用正则表达式查找/替换 JSON 中的字符串
- google-apps-script - 访问另一个工作表中一列的数据
- json - 从Angular4中的[object object]获取值
- wpf - 如何在 WPF Datagrid 的另一个项目中包含一个子项目