R语言如何为表格添加表头、转换为flextable并按车型分组
完整实现方案
你需要先加载tidyverse和flextable两个依赖包,以下是可直接运行的代码:
# 加载依赖包 library(tidyverse) library(flextable) # 原始数据 df <- data.frame(names= c("Mazda RX4", "Mazda RX4 Wag", "Datsun 710", "Hornet 4 Drive", "Hornet Sportabout", "Valiant", "Duster 360", "Merc 240D", "Merc 230", "Merc 280", "Merc 280C", "Merc 450SE", "Merc 450SL", "Merc 450SLC", "Cadillac Fleetwood"), score = c(21, 21, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8, 16.4, 17.3, 15.2, 10.4) ) # 1. 数据预处理:添加车型分组列、序号列 processed_df <- df %>% # 按车型前缀生成分组标签,可根据实际需求调整规则 mutate(车型分组 = case_when( str_detect(names, "^Mazda") ~ "马自达", str_detect(names, "^Datsun") ~ "达特桑", str_detect(names, "^Hornet") ~ "霍尼特", str_detect(names, "^Valiant") ~ "勇士", str_detect(names, "^Duster") ~ "达斯特", str_detect(names, "^Merc") ~ "奔驰", str_detect(names, "^Cadillac") ~ "凯迪拉克", TRUE ~ "其他" )) %>% rownames_to_column("#") %>% rename("Car type" = names) %>% # 调整列顺序,把分组列放最前面 select(车型分组, `#`, `Car type`, score) # 2. 转换为flextable,设置表头、分组、主题 ft <- flextable(processed_df) %>% # 添加顶部表头:在#列上方加对应表头,可按需修改values里的文本内容 add_header_row( values = c("车型分类", "序号", "车辆信息", "评分"), colwidths = c(1,1,1,1) ) %>% # 合并相同分组的单元格,实现分组效果 merge_v(j = "车型分组") %>% # 调整分组单元格对齐方式 valign(j = "车型分组", valign = "top") %>% align(j = "车型分组", align = "center", part = "all") %>% # 应用flextable内置主题,可替换为theme_vanilla、theme_tron等其他主题 theme_booktabs() # 输出查看结果 ft
实现说明
- 表头设置:使用
add_header_row而非硬插入数据行的方式添加顶部表头,你可以按需修改values参数里#列对应的表头内容。 - 车型分组:先通过规则匹配给数据新增分组列,再用
merge_v合并同分组的单元格实现分组效果,分组规则可根据你的实际分类需求调整。 - 主题替换:直接替换代码里的
theme_booktabs为你需要的flextable主题函数即可。
内容的提问来源于stack exchange,提问作者str_rst
相关产品推荐
相关产品推荐

