如何基于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
相关产品推荐
相关产品推荐

