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

如何基于starwars数据集在R中创建整数与百分比同单元格的交叉表

实现同一单元格包含计数与百分比的交叉表

可以利用janitor包的tabyl系列函数快速实现需求,这个包专门为交叉表设计,能轻松将计数与百分比合并到同一单元格。以下是完整代码:

# 加载所需包
library(janitor)
library(dplyr)
library(tibble)

# 加载数据集并筛选人类样本
starwars_data <- as_tibble(starwars)
humans_data <- starwars_data %>% filter(species == "Human")

# 创建交叉表并合并计数与行百分比
crosstab_combined <- humans_data %>%
  tabyl(sex, skin_color) %>%  # 生成基础交叉表(行:sex,列:skin_color)
  adorn_percentages("row") %>%  # 计算行百分比
  adorn_pct_formatting(digits = 1) %>%  # 格式化百分比,保留1位小数
  adorn_ns(position = "front") %>%  # 将计数与百分比合并,计数在前
  adorn_totals(c("row", "col"))  # 添加行、列总计

# 查看结果
print(crosstab_combined)

代码说明:

  • tabyl(sex, skin_color):生成以sex为行、skin_color为列的基础计数交叉表
  • adorn_percentages("row"):基于行计算百分比(如果需要列百分比,将参数改为"col"即可)
  • adorn_pct_formatting(digits = 1):设置百分比的小数位数,可根据需求调整
  • adorn_ns(position = "front"):把原始计数和格式化后的百分比合并到同一单元格,格式为计数 (百分比)
  • adorn_totals(c("row", "col")):添加总计行(所有性别合计)和总计列(所有肤色合计)

运行结果示例(部分):

sex    dark     fair     light     none     pale      tan    white     Total
  female  0 (0.0%) 3 (16.7%) 5 (27.8%) 1 (5.6%) 0 (0.0%) 0 (0.0%) 0 (0.0%)  9 (100.0%)
    male 4 (15.4%) 13 (50.0%) 5 (19.2%) 0 (0.0%) 1 (3.8%) 2 (7.7%) 1 (3.8%) 26 (100.0%)
    Total 4 (11.4%) 16 (45.7%) 10 (28.6%) 1 (2.9%) 1 (2.9%) 2 (5.7%) 1 (2.9%) 35 (100.0%)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:22:41