You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中创建二级数据透视表

在R中构建二级分组的数据透视表

没问题!我来帮你搞定R里的二级数据透视表~首先咱们得先把数据处理好,因为你的Sales列带$和逗号,得先转换成数值才能计算汇总。下面我用两种常用方法实现你要的效果:

第一步:数据预处理

先把你的示例数据读入并清洗Sales列:

# 加载需要的工具包
library(dplyr)
library(scales) # 用来格式化金额

# 模拟你的原始数据(这里用你提供的中国/亚洲的部分数据)
sales_data <- tibble(
  Country = rep("China", 36),
  Region = rep("Asia", 36),
  Sales = c("$109,680", "$141,165", "$77,516", "$154,060", "$38,597", "$125,985", 
            "$91,850", "$90,513", "$51,710", "$53,283", "$77,352", "$5,534", 
            "$6,645", "$135,301", "$176,095", "$146,270", "$54,665", "$62,111", 
            "$64,390", "$30,197", "$132,397", "$165,454", "$113,084", "$40,922", 
            "$161,574", "$16,753", "$54,616", "$117,857", "$193,862", "$23,478", 
            "$16,135", "$103,860", "$72,478", "$45,570", "$81,337", "$174,224")
)

# 清洗Sales列:去掉$和逗号,转成数值型
sales_data_clean <- sales_data %>%
  mutate(Sales = as.numeric(gsub("\\$|,", "", Sales)))

第二步:构建二级透视表(dplyr方法)

这个方法能完美实现你想要的“区域-国家”分层展示效果,区域汇总行在上,对应国家的明细行在下,且重复的区域名称会被空出:

# 1. 计算每个国家的销售额总和
country_totals <- sales_data_clean %>%
  group_by(Region, Country) %>%
  summarise(Total_Sales = sum(Sales), .groups = "drop")

# 2. 计算每个区域的销售额总和(把区域名称同时放在Country列,方便合并)
region_totals <- country_totals %>%
  group_by(Region) %>%
  summarise(Country = Region, Total_Sales = sum(Total_Sales), .groups = "drop")

# 3. 合并数据并调整格式,模拟二级透视表样式
final_table <- bind_rows(region_totals, country_totals) %>%
  # 按区域排序,让区域汇总行排在对应国家行的前面
  arrange(Region, desc(Country == Region)) %>%
  # 把重复的区域名称替换为空,让表格更清晰
  mutate(Region = ifelse(duplicated(Region), "", Region)) %>%
  # 把销售额格式化为带$和千分位的样式
  mutate(Total_Sales = dollar(Total_Sales, big.mark = ","))

运行后你会得到这样的结果:

RegionCountryTotal_Sales
AsiaAsia$3,452,710
China$3,452,710

如果你的数据包含欧洲、南美等其他区域和对应国家,这个方法完全通用——只要原始数据里有Region和Country的对应关系,就能自动生成分层的汇总表。

简便替代方法:用janitor包快速生成

如果你想更省事,可以用janitor包的函数快速生成带汇总的分层表:

library(janitor)

final_table_janitor <- sales_data_clean %>%
  # 按区域、国家分组计算总和
  group_by(Region, Country) %>%
  summarise(Total_Sales = sum(Sales), .groups = "drop") %>%
  # 给每个区域添加总计行(可选)
  adorn_totals(where = "row", name = "区域总计") %>%
  # 格式化金额
  mutate(Total_Sales = dollar(Total_Sales, big.mark = ","))

这个方法生成的表格会明确标注“区域总计”,适合需要更正式汇总的场景。

内容的提问来源于stack exchange,提问作者Daniel Almaraz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:05:57