r - 我如何为特定列中的每个值添加一个总行,根据其他列进行计算,
问题描述
假设我有这个数据框
我想要的是这个
我想要做的是创建按月变量分组的行,然后获得总变量的总和,以及该月所有值的days_month变量的唯一值。
我只是想知道是否有一种简单的方法可以做到这一点,它不涉及多个点差和带有装饰总数的聚集,我必须在合计后将每月的天数改回原始值等。有没有一个快速和简单的方法来做到这一点?
解决方案
一种选择是按“月”、“天数_in_月”分组并adorn_total
通过group_map
ping应用
library(dplyr)
library(janitor)
df1 %>%
group_by(month, days_in_month) %>%
group_map(~ .x %>%
adorn_totals("row")) %>%
select(names(df1))
# A tibble: 10 x 4
# Groups: month, days_in_month [2]
# month person total days_in_month
# <int> <chr> <int> <int>
# 1 1 John 7 31
# 2 1 Jane 18 31
# 3 1 Tim 20 31
# 4 1 Cindy 11 31
# 5 1 Total 56 31
# 6 2 John 18 28
# 7 2 Jane 13 28
# 8 2 Tim 15 28
# 9 2 Cindy 9 28
#10 2 Total 55 28
如果我们需要其他统计数据,我们可以将其放入group_map
library(tibble)
df1 %>%
group_by(month, days_in_month) %>%
group_map(~ bind_rows(.x, tibble(person = "Mean", total = mean(.x$total))))
数据
df1 <- structure(list(month = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), person = c("John",
"Jane", "Tim", "Cindy", "John", "Jane", "Tim", "Cindy"), total = c(7L,
18L, 20L, 11L, 18L, 13L, 15L, 9L), days_in_month = c(31L, 31L,
31L, 31L, 28L, 28L, 28L, 28L)), class = "data.frame", row.names = c(NA,
-8L))
推荐阅读
- javascript - D3JS:将颜色渐变设置为高于某个阈值
- reactjs - 如何设置 eslint 忽略来自 scss 文件的 @import
- laravel - 仅使用 Lumen 中的电子邮件登录 (JWT Auth)
- c# - 从 IProfileService 设置的其他声明在 MVC 客户端的 OpenIdConnect 处理程序中不可用
- python - Python tkinter - 编译成功但程序在编译为 Exe 时运行不正确
- swift - iOS Swift Mapkit 注释顺序
- python - matplotlib 堆积条形图在版本更新后被窃听
- asp.net - EF Core 5 删除 HiLo 序列
- css - CSS网格自动填充总是两列
- c# - 一页中有两个本地视图 - 如何实现这一点?可见导航