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

基于多分类变量创建汇总表的R语言实现求助

实现分类变量交叉展示多连续变量的统计值

你可以借助tidyverse系列工具整理数据,再用表格生成包输出目标格式;也可以用tables包直接通过公式生成统计表格,以下是具体实现:

方法一:用tidyverse整理+gt生成美观表格

先加载所需包:

library(tidyverse)
library(gt)

按market和accomod_type分组,计算指定统计值(这里年龄、停留时长取均值,到访人数取总计),再重塑为适合展示的宽格式:

# 分组计算统计值
summary_df <- my_df %>%
  group_by(market, accomod_type) %>%
  summarise(
    mean_age = mean(age),
    mean_length_stay = mean(length_stay),
    total_arrivals = sum(arrivals),
    .groups = "drop"
  ) %>%
  # 重塑为宽格式,按市场拆分统计列
  pivot_wider(
    names_from = market,
    values_from = c(mean_age, mean_length_stay, total_arrivals),
    names_sep = "_"
  )

生成带格式的表格:

summary_df %>%
  gt() %>%
  tab_header(title = "游客数据统计(按市场与住宿类型)") %>%
  cols_label(
    accomod_type = "住宿类型",
    mean_age_Market_1 = "Market 1 - 平均年龄",
    mean_age_Market_2 = "Market 2 - 平均年龄",
    mean_age_Market_3 = "Market 3 - 平均年龄",
    mean_length_stay_Market_1 = "Market 1 - 平均停留时长",
    mean_length_stay_Market_2 = "Market 2 - 平均停留时长",
    mean_length_stay_Market_3 = "Market 3 - 平均停留时长",
    total_arrivals_Market_1 = "Market 1 - 总到访人数",
    total_arrivals_Market_2 = "Market 2 - 总到访人数",
    total_arrivals_Market_3 = "Market 3 - 总到访人数"
  ) %>%
  fmt_number(columns = starts_with(c("mean_", "total_")), decimals = 1)

如果需要调整行列维度(比如把market作为行,accomod_type作为列),只需修改pivot_wider的names_from和values_from参数即可。

方法二:用tables包直接生成统计表格

tables包支持通过公式快速定义交叉统计表格,无需手动重塑数据:

library(tables)

# 公式格式:行变量 ~ 列变量 * (连续变量) * 统计函数
tabular(
  market ~ accomod_type * (age + length_stay) * mean + arrivals * sum,
  data = my_df
)

该命令会直接输出按market为行、accomod_type为列,展示各连续变量均值/总计的交叉表格。

注:xtabs和ftable更适合单一变量的交叉计数统计,多连续变量的复杂统计需求用上述方法更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:47:10