r - 使用 grand_summary_rows() 创建用户定义的总计
问题描述
我有一个看起来像这样的表:
category family amount
<chr> <chr> <chr>
1 SALES ONLINE SALES 47
2 SALES IN STORE 72
3 COGS LABOR 28
4 COGS TAXES 35
5 COGS WORKERS COMP 24
6 COGS BENEFITS 33
7 EXPENSE AUTOMOBILE 44
8 EXPENSE RENT 12
9 EXPENSE TELEPHONE 26
我正在尝试从中创建一个 gt 表,因此我创建了以下代码:
library(tidyverse)
library(gt)
category <- c(rep("SALES",2),
rep("COGS", 4),
rep("EXPENSE",3)
)
family <- c("ONLINE SALES","IN STORE","LABOR","TAXES","WORKERS COMP","BENEFITS",
"AUTOMOBILE", "RENT","TELEPHONE")
amount <- c(47,72,28,35,24,33,44,12,26)
output <- as_tibble(cbind(category,family,amount)) %>%
mutate(amount= as.numeric(amount)) %>%
gt(rowname_col = 'family',
groupname_col = 'category') %>%
row_group_order(c("SALES","COGS", "EXPENSE")) %>%
summary_rows(groups = TRUE,
columns = 'amount',
fns = list(
Total = ~sum(.,na.rm = TRUE)
))
output
在所有金额仍然为正的情况下,您如何获得SALES-COGS-EXPENSE
使用该 功能的总体总数?grand_summary_rows()
解决方案
如果我正确理解了您的要求,您可以使用以下代码:
output2 <- as_tibble(cbind(category,family,amount)) %>%
mutate(amount= as.numeric(amount)) %>%
gt(rowname_col = 'family', groupname_col = 'category') %>%
summary_rows(groups = TRUE,
columns = 'amount',
fns = list(
Total = ~sum(.,na.rm = TRUE)
)) %>%
grand_summary_rows(
columns = c("family","category","amount"),
fns = list(
"Grand Total" = ~sum(.,na.rm = TRUE)),
formatter = fmt_number,
use_seps = FALSE
)
output2
################### 编辑 ###################
我从文档中找到的唯一方法是创建自定义聚合函数。这是输出打印屏幕的完整工作示例。
customFunc <- function(data) {
salesSum <- sum(subset(data$`_data`[,c("amount")], category == 'SALES'))
cogsSum <- sum(subset(data$`_data`[,c("amount")], category == 'COGS'))
expenseSum <- sum(subset(data$`_data`[,c("amount")], category == 'EXPENSE'))
return (salesSum - cogsSum - expenseSum)
}
data <- as_tibble(cbind(category,family,amount)) %>%
mutate(amount= as.numeric(amount)) %>%
gt(rowname_col = 'family', groupname_col = 'category')
output3 <- data %>%
summary_rows(groups = TRUE,
columns = 'amount',
fns = list(
Total = ~sum(.,na.rm = TRUE)
)) %>%
grand_summary_rows(
columns = c("family","category","amount"),
fns = list(
"Grand Total" = ~customFunc(data)),
formatter = fmt_number,
use_seps = FALSE
)
output3
推荐阅读
- python - 如何在 Python 中使用正则表达式捕获数字?
- javascript - html动态居中文本上下图像
- java - “java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'...'”是什么意思,我该如何解决?
- excel - 为什么类型转换不能解决这个 VBA 溢出错误
- android - RecyclerView 项目仅在添加时未对齐
- spring - 统一的二维弹簧效果
- android - 信标监控在 nativescript vue 中不起作用
- python - 导入的类看不到 Pytest 环境装置
- r - 我正在使用 rvest 抓取黄页,并在运行 submit_form() 时收到 403 Forbidden 消息
- python - 是否可以在线程中启动新进程?