基于多分类变量创建汇总表的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
相关产品推荐
相关产品推荐

